前言
有时候需要菜单项显示的不仅是简单的文字,需要显示一个控件或界面,这时候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。
1
2
3
4
5
6
7
8connect(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);
显示菜单和常规的一样的,位置由自己决定
1
2
3
4
5
6
7
8
9void 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前言代码和效果结束语的全部内容,更多相关菜单项内容请搜索靠谱客的其他文章。
发表评论 取消回复