如何在 Qt Designer 中为自定义插件的 QString 属性 删除 "translatable" 复选框?
How can I remove the "translatable" checkbox in Qt Designer for a QString property of a custom plugin?
我正在为 Qt Designer 创建一个插件(目前,我还在使用 Qt 4.8.7)。它有一个 属性 代表硬盘上的一个目录(它的类型是 QString)。我不希望这个 属性 永远可以翻译。在 Qt Designer 中工作时,我可以在 属性 编辑器停靠栏 window 中看到 QObject 的 objectName
属性 执行我想要的操作,其下没有子属性。在我的插件中,我使用 Q_PROPERTY
宏定义了一个 settingsPath
属性(与 QObject 声明 objectName
的方式相同),但是当我在 Qt Designer 中编辑一个小部件并添加我的插件小部件,settingsPath
属性 显示三个子项:可翻译、消歧和注释。我不关心最后两个,但我不希望这个 属性 是可翻译的,我不希望这个插件的用户必须取消选中 "translatable" 才能使用它.
这里是关于为什么用户可能需要取消选中可翻译的更多解释:我需要在波兰语事件中使用 属性 来查找一些注册表设置。无论它是否可翻译,这通常都可以正常工作。但是,如果小部件在 QSplitter 中,我可以在生成的 moc_ 文件中看到,当在 QSplitter 上设置百分比时,我的插件小部件的抛光事件被调用(堆栈深处的几层),这是在任何翻译之前代码。这意味着在我的插件上发生 Polish 事件时尚未读入设置。 (setupUi() 可以在任何情况下调用 ensurePolish() 的事实可能是 Qt 中的一个错误,但那是另一个问题。)
我将 settingsPath
属性 更改为 QByteArray,这就是我想要的。我仍然不知道 Qt 是如何为 objectName 做的。
Qt Designer 中的 "Translatable" 属性 由自定义窗口部件界面 domXml
中 stringpropertyspecification
的 notr
属性控制。 Link to documentation:
If the attribute is "true", the value is not meant to be translated.
要禁用字符串 属性 exampleProperty
的翻译,您 QDesignerCustomWidgetInterface
后代中的 domXml()
函数应该 return 类似于:
<ui language="c++"> displayname="MyWidget">
<widget class="mynamespace::MyWidget" name="mywidget"/>
<customwidgets>
<customwidget>
<class>mynamespace::MyWidget</class>
<propertyspecifications>
<stringpropertyspecification name="exampleProperty" notr="true" type="singleline" />
</propertyspecifications>
</customwidget>
</customwidgets>
</ui>
我正在为 Qt Designer 创建一个插件(目前,我还在使用 Qt 4.8.7)。它有一个 属性 代表硬盘上的一个目录(它的类型是 QString)。我不希望这个 属性 永远可以翻译。在 Qt Designer 中工作时,我可以在 属性 编辑器停靠栏 window 中看到 QObject 的 objectName
属性 执行我想要的操作,其下没有子属性。在我的插件中,我使用 Q_PROPERTY
宏定义了一个 settingsPath
属性(与 QObject 声明 objectName
的方式相同),但是当我在 Qt Designer 中编辑一个小部件并添加我的插件小部件,settingsPath
属性 显示三个子项:可翻译、消歧和注释。我不关心最后两个,但我不希望这个 属性 是可翻译的,我不希望这个插件的用户必须取消选中 "translatable" 才能使用它.
这里是关于为什么用户可能需要取消选中可翻译的更多解释:我需要在波兰语事件中使用 属性 来查找一些注册表设置。无论它是否可翻译,这通常都可以正常工作。但是,如果小部件在 QSplitter 中,我可以在生成的 moc_ 文件中看到,当在 QSplitter 上设置百分比时,我的插件小部件的抛光事件被调用(堆栈深处的几层),这是在任何翻译之前代码。这意味着在我的插件上发生 Polish 事件时尚未读入设置。 (setupUi() 可以在任何情况下调用 ensurePolish() 的事实可能是 Qt 中的一个错误,但那是另一个问题。)
我将 settingsPath
属性 更改为 QByteArray,这就是我想要的。我仍然不知道 Qt 是如何为 objectName 做的。
"Translatable" 属性 由自定义窗口部件界面 domXml
中 stringpropertyspecification
的 notr
属性控制。 Link to documentation:
If the attribute is "true", the value is not meant to be translated.
要禁用字符串 属性 exampleProperty
的翻译,您 QDesignerCustomWidgetInterface
后代中的 domXml()
函数应该 return 类似于:
<ui language="c++"> displayname="MyWidget">
<widget class="mynamespace::MyWidget" name="mywidget"/>
<customwidgets>
<customwidget>
<class>mynamespace::MyWidget</class>
<propertyspecifications>
<stringpropertyspecification name="exampleProperty" notr="true" type="singleline" />
</propertyspecifications>
</customwidget>
</customwidgets>
</ui>