我制作了一个自定义的 QtDesigner 插件。它在 QtDesigner 中加载良好,我可以在 .ui 文件中使用它,并且它在可执行文件中运行良好。
我唯一担心的是,在另一个小部件中使用插件时,我无法更改插件的子小部件的值。
对不起,如果它令人困惑,这里是情况的示意图:
MyDesignerPlugin -> QWidget -> QComboBox
-> QTextEdit
在 QtDesigner 中:
MainWindow -> MyDesignerPlugin
而且我无法访问底层的 QComboBox 和 QTextEdit。好吧,我找到了两种方法。第一个效果很好,但很麻烦。第二个几乎可以工作。
第一个解决方案 - 工作
首先,我可以为 QWidget 中的子小部件创建 setter 和 getter,并且由于 Q_PROPERTY 魔术,属性出现在 QtDesigner 的属性编辑器中。
这很好,但不是我想要的。我希望能够单击 QTextEdit 并直接从那里编辑文本。默认情况下这是不可能的。
第二种解决方案 - 不工作
我查看了示例https://qt-project.org/doc/qt-5.0/qtdesigner/containerextension.html#multipagewidget-class-definition并偶然发现了这一行multipagewidget.cpp
:
comboBox->setObjectName("__qt__passive_comboBox");
如果我将此行添加到我的插件小部件(分别"__qt__passive_textEdit"
用于 textEdit),QtDesigner 然后允许我单击组合框并更改所选值。但是当我关闭 QtDesigner 并重新打开它时,不会保存操作(更改组合框中的选定项目)。
问题
所以我的问题有两个:在包含 QtDesigner 插件时如何设置子小部件的属性,以及这个"__qt__passive_..."
字符串有什么魔力?
编辑: multipagewidget 示例也无法保存从组合框更改时 currentIndex 更改的事实。
所以现在我将使用 Q_PROPERTY 路线,就像@ratchet 怪胎的评论所建议的那样
如果有人想知道如何查看更改是否会保存,只需在 QtDesigner 中,属性名称在属性编辑器中变为粗体。