三、QWidgetAction类详解 【详细描述】 QWidgetAction通过接口方式继承自QAction,用于将自定义的widget插入基于action的容器,例如工具栏。 如果QWidgetAction添加到QToolBar,那么就会调用QWidgetAction::createWidget()。我们可以重新实现这个函数创建自定义的widget。 如果将仅有一个默认widget的QWidgetAction同时添加到两个工具栏上,那么仅有第一个添加才会显示出来。QWidgetAction接管了默认的widget。 (this); QWidgetAction *action2 = new QWidgetAction(popupMenu); action2->setDefaultWidget(item2); MyMenuItem *item3 = new MyMenuItem(this); QWidgetAction *action3 = new QWidgetAction(popupMenu); action3->setDefaultWidget
https://doraemon-hub-art.github.io"); ui->statusBar->addPermanentWidget(tag); 自定义菜单栏 自定义菜单需要定义一个继承QWidgetAction 示例MyAction.h #ifndef MYACTION_H #define MYACTION_H #include<QWidgetAction> #include<QLineEdit> class MyAction : public QWidgetAction { Q_OBJECT public: MyAction(QObject* parent = 0); protected: MyAction.cpp #include "myaction.h" #include<QSplitter> #include<QLabel> MyAction::MyAction(QObject* parent):QWidgetAction
但是这里我们要实现自定义托盘菜单,我们从QSystemTray派生一个子类,并定义好相关的类成员变量: QMenu* m_trayMenu; QWidget* m_topWidget; QWidgetAction * m_topWidgetAction; QLabel* m_topLabel; QLabel* m_homeBtn; QWidget* m_bottomWidget; QWidgetAction* m_helpOnline; QAction* m_homePage; QAction* m_notification; QAction* m_settings; 显然,我们注意到一个平时没有接触到的:QWidgetAction 因此我们定义了两个QWidgetAction。另外,我们还有一个疑问就是:布局好的Widget如何"伪装"成Action插入到菜单项中去呢? 我们可以使用QWidgetAction的setDefaultWidget()方法来完成这项工作。后面的代码将会有说明。