概述
前言
有时候需要菜单项显示的不仅是简单的文字,需要显示一个控件或界面,这时候QWidgetAction该上场了。
代码和效果
QWidgetAction继承的QAction,有QAction一切功能,在此基础上增加了将自定义的widget插入基于action的容器。我看了QWidgetAction的帮助文档,就几个方法:
public:
QWidget *defaultWidget() const
void releaseWidget(QWidget *widget)
QWidget *requestWidget(QWidget *parent)
void setDefaultWidget(QWidget *widget)
protected:
virtual QWidget *createWidget(QWidget *parent)
QList<QWidget *> createdWidgets() const
virtual void deleteWidget(QWidget *widget)
若是只是在菜单项上显示定制的Widget,那么常用的方法更少:用setDefaultWidget将定制的widget插入到action中,若需要则用defaultWidget获取该widget的指针。
若是将QWidgetAction添加到QToolBar,那么就会调用createWidget()。我们可以重新实现这个函数创建自定义的widget。createdWidgets获取所有的由createWidget创建的widget的容器。
我这里只用实现了最常用的QWidgetAction作为菜单项:按钮点击,显示菜单。MenuWidget 为我自定义的widget。
connect(m_pIconLabel,&QPushButton::clicked,this,&TitleBar::showCustomMenu);
m_pMyMenu=new QMenu(this);
m_pShowWidgetAction=new QWidgetAction(this);
MenuWidget *widget=new MenuWidget(this);
widget->setFixedSize(400,350);
m_pShowWidgetAction->setDefaultWidget(widget);
m_pMyMenu->addAction(m_pShowWidgetAction);
显示菜单和常规的一样的,位置由自己决定
void TitleBar::showCustomMenu()
{
//Q_UNUSED(pos);
QWidget *pWindow = this->window();
int x=pWindow->geometry().x()+this->geometry().x();
int y=pWindow->geometry().y()+this->height()+3;
QPoint pos(x,y);
m_pMyMenu->exec(pos);
}
效果图:
结束语
好了,就这么菜单项的定制就这么简单。
最后
以上就是魁梧板凳为你收集整理的菜单项的定制,QWidgetAction的使用——Qt前言代码和效果结束语的全部内容,希望文章能够帮你解决菜单项的定制,QWidgetAction的使用——Qt前言代码和效果结束语所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复