c++ - 如何在 Qt Designer 中为自定义插件的 QString 属性删除 "translatable"复选框?

标签 c++ qt qwidget qt-designer

我正在为 Qt Designer 创建一个插件(目前,我还在使用 Qt 4.8.7)。它有一个属性代表硬盘上的一个目录(它的类型是 QString)。我不希望这个属性永远可以翻译。在 Qt Designer 中工作时,我可以在属性编辑器停靠窗口中看到 QObject 的 objectName 属性执行我想要的操作,其下没有子属性。在我的插件中,我使用 Q_PROPERTY 宏定义了一个 settingsPath 属性(与 QObject 声明 objectName 的方式相同),但是当我在Qt Designer 并添加我的插件小部件,settingsPath 属性显示三个子项:translatable、disambiguation 和 comment。我不关心最后两个,但我不希望这个属性是可翻译的,我不希望这个插件的用户必须取消选中“可翻译”才能使用它。

下面是关于用户可能需要取消选中可翻译的原因的更多解释:我需要在 Polish 事件中使用该属性来查找一些注册表设置。无论它是否可翻译,这通常都可以正常工作。但是,如果小部件在 QSplitter 中,我可以在生成的 moc_ 文件中看到,当在 QSplitter 上设置百分比时,我的插件小部件的抛光事件被调用(堆栈深处的几层),这是在任何翻译之前代码。这意味着在我的插件上发生 Polish 事件时尚未读入设置。 (setupUi() 可以在任何情况下调用 ensurePolish() 的事实可能是 Qt 中的错误,但那是另一个问题。)

最佳答案

Qt Designer 中的“可翻译”属性由自定义小部件界面的domXmlstringpropertyspecificationnotr 属性控制。 Link to documentation :

If the attribute is "true", the value is not meant to be translated.

要禁用字符串属性 exampleProperty 的翻译,您在 QDesignerCustomWidgetInterface 后代中的 domXml() 函数应该返回如下内容:

<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>

关于c++ - 如何在 Qt Designer 中为自定义插件的 QString 属性删除 "translatable"复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51483773/

相关文章:

C++,MingW,对 `libiconv' 的 undefined reference

c++ - 在类中动态分配对象指针的二维数组

python - setGeometry() 紧接在 addWidget() 问题之后

c++ - 如何使用 QPainter 在 QMainWindow 中的一组小部件中的特定小部件上绘制?

c++ - 无法移动 QDockWidget

c++ - 将默认字符串指针传递给函数

c++ - qdir.h 与 x.h (X11) : how to resolve? 冲突

qt - Pyside 更改布局

qt - 在 QT Creator 中使用自定义构造函数提升自定义小部件

c++ - 我可以强制默认特殊成员函数为 noexcept 吗?