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 将分隔符添加到我的工具栏(使用插件,而不是提升),我应该继承 QAction
、QWidget
还是 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 的自定义动作插件的主要内容,如果未能解决你的问题,请参考以下文章