我是靠谱客的博主 光亮果汁,这篇文章主要介绍QWidgetAction类详解,现在分享给大家,希望可以做个参考。

         QWidgetAction通过接口方式继承自QAction,用于将自定义的widget插入基于action的容器,例如工具栏。
        出现在应用程序中的绝大多数的actions都是代表了一个菜单项或工具栏中的一个按钮。然而有时候我们也许要复杂一点的widgets。例如,字处理程序工具栏中使用QComboBox实现zoom action,实现不同程度的缩放。QToolBar提供了QToolBar::insertWidget()函数可以十分方便的将单个widget插入到合适的位置。然而,如果你想在多个容器中实现自定义widget的action,那么你就必须实现QWidgetAction的子类。
        如果QWidgetAction添加到QToolBar,那么就会调用QWidgetAction::createWidget()。我们可以重新实现这个函数创建自定义的widget。
        如果将一个action从容器widget上删除,那么就会调用QWidgetAction::deleteWidget(),调用该函数的参数就是上面创建的自定义widget。该函数的默认实现是将widget隐藏,然后使用QObject::deleteLater()删除它。
        如果你只有一个自定义的widget,那么你就可以使用setDefaultWidget()函数将它设置为默认的widget。那么以后当action被添加到QToolBar上时,就会自动将该自定义的widget添加到QToolBar上。如果将仅有一个默认widget的QWidgetAction同时添加到两个工具栏上,那么仅有第一个添加才会显示出来。QWidgetAction接管了默认的widget。
        注意:这取决于widget激活action,例如重新实现鼠标事件处理者,然后调用QAction::trigger()。
Mac OS X:在Mac OS X上,如果你将一个widget添加到应用程序菜单栏的某个菜单上,那么该widget可以显示出来,并且可以实现功能,只是有一些限制:
      1、该widget的父对象不再是QMenu而是原生的菜单视图。如果你在其他地方显示菜单(例如作为一个弹出菜单),那么该菜单不会显 示在你期望的地方;
     2、针对该widget的Focus/Keyboard处理不再可用;
    3、由于Apple的设计,该widget的鼠标轨迹暂时不可用;
    4、将triggered()信号链接到打开模态对话框的槽函数上会导致应用程序崩溃(在Mac OS X10.4,这被告知是Apple的一个BUG),一个规避的方法是使用QueuedConnection代替DirecConnection。

 

示例

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class MyMenuItem:public QWidget { Q_OBJECT public: MyMenuItem(QWidget *parent) { new QLabel("test",this); } }; int main(int argc, char *argv[]) { popupMenu = new QMenu(this); QAction *action1 = new QAction(tr("&New1"), this); QAction *action2 = new QAction(tr("&New2"), this); QAction *action3 = new QAction(tr("&New3"), this); QAction *action4 = new QAction(QIcon("./load.png"), tr("Bookstore"), this); popupMenu->addAction(action1); popupMenu->addAction(action2); popupMenu->addAction(action3); popupMenu->addAction(action4); MyMenuItem *item1 = new MyMenuItem(this); item1->setFixedSize(100,100); //这里可以设置大小 QWidgetAction *action1 = new QWidgetAction(popupMenu); action1->setDefaultWidget(item1); MyMenuItem *item2 = new MyMenuItem(this); QWidgetAction *action2 = new QWidgetAction(popupMenu); action2->setDefaultWidget(item2); MyMenuItem *item3 = new MyMenuItem(this); QWidgetAction *action3 = new QWidgetAction(popupMenu); action3->setDefaultWidget(item3); popupMenu->exec(); }

参考:

https://www.yuque.com/docs/share/75fcd67c-6f22-4263-b7c5-e0c4f2cb9bfa

 

 

 

最后

以上就是光亮果汁最近收集整理的关于QWidgetAction类详解的全部内容,更多相关QWidgetAction类详解内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部