代码之家  ›  专栏  ›  技术社区  ›  Ben

如何在Qt设计器中为自定义插件的QString属性删除“可翻译”复选框?

  •  0
  • Ben  · 技术社区  · 7 年前

    我正在为Qt Designer创建一个插件(目前,我只能使用qt4.8.7)。它有一个表示硬盘上的目录的属性(它的类型是QString)。我不希望这个属性永远是可翻译的。在Qt设计器中工作时,我可以在属性编辑器停靠窗口中看到QObject的 objectName 属性执行我想要的,它下面没有子属性。在我的插件中,我定义了一个 settingsPath 属性使用 Q_PROPERTY 宏(与QObject声明 对象名 ),但当我在Qt Designer中编辑小部件并添加插件小部件时 布丁斯帕斯 属性显示三个子项:可翻译、消歧和注释。我不关心最后两个,但我不希望这个属性是可翻译的,我也不希望这个插件的用户必须取消选中“可翻译”才能使用它。

    这里有一个关于为什么用户可能需要取消选中可翻译的解释:我需要在波兰事件中使用该属性来查找一些注册表设置。不管它是否可翻译,这通常都能很好地工作。但是,如果widget在QSplitter中,我可以在生成的moc_u文件中看到,当设置QSplitter上的百分比时,我的plugin小部件的polish事件被调用(栈的几个层深),这是在任何翻译代码之前。这意味着在我的插件上的波兰事件发生时还没有读入设置。(setupUi()可以对任何东西调用EnsureLish(),这可能是Qt中的一个错误,但这是另一个问题。)

    1 回复  |  直到 7 年前
        1
  •  1
  •   Serikov    6 年前

    Qt设计器中的“可翻译”属性由 notr 属性 stringpropertyspecification 在里面 domXml Link to documentation :

    禁用字符串属性的转换 exampleProperty domXml() 函数 QDesignerCustomWidgetInterface 后代应该按照以下方式返回:

    <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>
    
        2
  •  0
  •   Ben    7 年前

    settingsPath 财产归QByteArray所有,这就是我想要的。我仍然不知道Qt是如何对objectName进行处理的。