主窗口(10):【类】QWidgetAction [官翻]

QWidgetAction Class

QWidgetAction类通过一个接口扩展了QAction,该接口用于将自定义小部件插入基于操作的容器(如工具栏)中。

Header#include < QWidgetAction >
qmakeQT += widgets
InheritsQAction
Inherited By

详细说明

应用程序中的大多数操作都表示为菜单中的项或工具栏中的按钮。但是有时需要更复杂的小部件。例如,字处理器中的缩放动作可以使用QToolBar中的QComboBox来实现,QComboBox表示不同缩放级别的范围。QToolBar提供QToolBar::insertWidget() 作为插入单个小部件的便利函数。但是,如果您想要实现一个在多个容器中使用自定义小部件进行可视化的操作,那么您必须将QWidgetAction子类化。

例如,如果将QWidgetAction添加到QToolBar,则调用QWidgetAction::createWidget() 。该函数的重新实现应该使用指定的父级创建一个新的自定义小部件。

如果从容器小部件中删除了该操作,那么将使用先前创建的自定义小部件作为参数调用QWidgetAction::deleteWidget() 。默认实现隐藏小部件并使用QObject::deleteLater() 将其删除。

如果只有一个自定义小部件,那么可以使用setDefaultWidget() 将其设置为默认小部件。如果将操作添加到QToolBar,或者通常添加到支持QWidgetAction的操作容器中,则将使用该小部件。如果一个只有默认小部件的QWidgetAction同时添加到两个工具栏中,那么默认小部件只显示在该操作添加到的第一个工具栏中。QWidgetAction接管默认小部件的所有权。

请注意,由小部件来激活操作,例如通过重新实现鼠标事件处理程序和调用QAction::trigger() 。

macOS:如果在macOS上向应用程序菜单栏中的菜单添加小部件,则会添加该小部件并使其正常工作,但有一些限制:

  • 小部件将从QMenu重新租入本机菜单视图。如果您在其他地方显示菜单(例如弹出菜单),小部件将不在那里。
  • 小部件的焦点/键盘处理是不可能的。
  • 由于苹果公司的设计,目前该小部件上的鼠标跟踪功能不起作用。
  • 将triggered() 信号连接到打开模式对话框的插槽将导致macOS 10.4崩溃(Apple已确认已知错误),解决方法是使用QueuedConnection而不是DirectConnection。

公共函数

构造和析构

  • QWidgetAction(QObject *parent)
  • virtual ~QWidgetAction()

其它

  • QWidget * defaultWidget() const
    void setDefaultWidget(QWidget *widget)
  • void releaseWidget(QWidget *widget)
  • QWidget * requestWidget(QWidget *parent)

受保护的函数

  • virtual QWidget * createWidget(QWidget *parent)

    每当将操作添加到支持自定义小部件的容器小部件时,就会调用此函数。如果不希望自定义小部件用作指定父小部件中操作的表示,则应返回0。

  • QList<QWidget *> createdWidgets() const

  • virtual void deleteWidget(QWidget *widget)

重写的受保护的函数

  • virtual bool event(QEvent *event) override
  • virtual bool eventFilter(QObject *obj, QEvent *event) override
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值