Qt Designer 的自定义动作插件

Posted

技术标签:

【中文标题】Qt Designer 的自定义动作插件【英文标题】:Custom action plugin for Qt Designer 【发布时间】:2012-01-18 01:04:43 【问题描述】:

我计划在我的工具栏(下方)的“暂停”和“设置”按钮之间使用一个分隔符,以使“设置”按钮在 QToolBar 中右对齐。下面的分隔符没有切割它。

以下方法显然有效,虽然我还没有真正尝试过:

QWidget* spacer = new QWidget();
spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// toolBar is a pointer to an existing toolbar
toolBar->addWidget(spacer);
toolBar->addAction("Right-aligned button");

(感谢http://www.ffuts.org/blog/right-aligning-a-button-in-a-qtoolbar/)

Qt Designer 似乎不允许将小部件添加到QToolBar,尽管QToolBar 确实有一个addWidget() 方法,如上所述。因此,如果我希望能够使用 Qt Designer 将分隔符添加到我的工具栏(使用插件,而不是提升),我应该继承 QActionQWidget 还是 QWidgetAction?有没有办法为 Qt Designer 编写自定义动作插件?

【问题讨论】:

回答“它会正确显示吗?”问题:“由于 Qt Designer 在表单设计过程中使用了真实的小部件,因此自定义小部件的外观与预览时相同。” developer.qt.nokia.com/doc/qt-4.8/… ...也就是说,假设它是一个小部件。 当然,不能将自定义小部件插件添加到 Designer 中的 QToolBar。就像任何其他小部件一样。自定义Action插件??? 【参考方案1】:

您不能继承 QAction 并期望在 Qt Creator/Designer 中优雅地使用它。它使用 ui 中的标签并将它们添加到菜单和工具栏。您不能像其他小部件一样指定 class="customclass" 元素和条目。因为动作的处理方式不同,所以你甚至不能对它们进行子类化,这样就不行了。

至于 QWidgetAction/QWidget,如果你明白我的意思,你和 QActionGroup 是在同一条船上。 (我个人认为这是表单设计器设计中的一个很大的疏漏!)所以在设计器中进行预览也出了。

您可以做的最后一件事(不可见的选项 3)是 QToolbar 子类化,但是您可以将其子类化,但是,除了普通的旧 QToolbar 可以做的事情之外,您不会在设计器中看到任何东西。这并不意味着它完全是我要达到的目的:

真正的答案必须是不可见的选项 4,将 QToolbar 子类化为设计器插件(如果您还不知道有一个插件,这将需要您进行大量编码,实际上我不知道有设计器插件)表单设计器插件并不常见,但是您可以找到某人的子类工具栏,并自己将其制作成插件,从而节省您一步(qt creator 甚至有一个模板),然后在 qt 中使用它设计师和你的布景。

我知道这个问题是在 2 年前提出的,但是当我看到一个未回答的问题时,我会想到那些可能会阅读并因死胡同而感到沮丧的搜索者,所以如果我能做出贡献,我会做......我希望我做到了至少可以帮助您或其他任何人走上正轨,祝大家好运!

【讨论】:

以上是关于Qt Designer 的自定义动作插件的主要内容,如果未能解决你的问题,请参考以下文章

Qt Designer 中的自定义菜单操作

Qt Designer插件安装问题

Qt系列文章之三十六(自定义Qt Designer插件)

Qt系列文章之三十六(自定义Qt Designer插件)

Qt Designer 和 PyQt5 自定义插件加载 TypeError

使用 PyQt5 在 Qt Designer 中的自定义(升级)小部件中获取另一个小部件的当前值