首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QUiLoader和忽略的动态特性

QUiLoader和忽略的动态特性
EN

Stack Overflow用户
提问于 2014-06-11 21:20:42
回答 1查看 421关注 0票数 1

我正在加载.ui文件,其中一个小部件(QComboBox)具有一个动态属性(http://qt-project.org/doc/qt-5/properties.html#dynamic-properties)。UI文件如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PopulateScriptConfig</class>
<widget class="QWidget" name="PopulateScriptConfig">
  <property name="geometry">
  <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
  </rect>
  </property>
  <property name="windowTitle">
  <string>Form</string>
  </property>
  <layout class="QVBoxLayout" name="verticalLayout">
  <item>
    <widget class="QGroupBox" name="langGroup">
    <property name="title">
      <string>Language</string>
    </property>
    <layout class="QVBoxLayout" name="verticalLayout_3">
      <item>
      <widget class="QComboBox" name="langCombo">
        <property name="ScriptingLangCombo" stdset="0">
        <bool>true</bool>
        </property>
      </widget>
      </item>
    </layout>
    </widget>
  </item>
  <item>
    <widget class="QGroupBox" name="codeGroup">
    <property name="title">
      <string>Implementation</string>
    </property>
    <layout class="QVBoxLayout" name="verticalLayout_2">
      <item>
      <widget class="QPlainTextEdit" name="codeEdit"/>
      </item>
    </layout>
    </widget>
  </item>
  </layout>
</widget>
<resources/>
<connections/>
</ui>

重要的部分是:

代码语言:javascript
复制
      <widget class="QComboBox" name="langCombo">
        <property name="ScriptingLangCombo" stdset="0">
        <bool>true</bool>
        </property>
      </widget>

我正在用QUiLoader::load()加载文件。我扩展了QUiLoader类,但只访问了createWidget()方法,在这里我可以像这样查询每个小部件:

代码语言:javascript
复制
QWidget* UiLoader::createWidget(const QString& className, QWidget* parent, const QString& name)
{
    QWidget* w = QUiLoader::createWidget(className, parent, name);
    qDebug() << w->dynamicPropertyNames();
    return w;
}

因此,我看到空列表被显示,因此动态属性似乎被完全忽略了。

注意,QtCreator中的UI编辑器识别这个动态属性correclty。

这一问题以前已经问过/报告过两次,但没有提供任何解决办法:

  1. https://bugreports.qt-project.org/browse/QTBUG-11791?page=com.atlassian.streams.streams-jira-plugin:activity-stream-issue-tab
  2. http://www.qtcentre.org/threads/32013-QUiLoader-Problem-No-Dynamic-Properties-Support

有什么想法吗?

我已经确定我加载了正确的文件。三次。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-13 18:28:43

原来是我的错,Qt工作正常。菜鸟的错误。

  1. 问题是,我试图在QUiLoader::createWidget()的overriden方法中访问动态属性,但这是对每个子小部件调用的,并且在创建所有小部件之后设置了动态属性。动态属性在createWidget()调用时尚不可用。
  2. 我所做的测试这个非常简单的项目(我在注释中提到过)也是正确工作的,我只是在打印调试信息时犯了一个错误(我是从错误的小部件中打印的)。就这样。

毕竟,QUiLoader可以很好地处理动态属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24172780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档