위젯 (QComboBox) 중 하나에 동적 속성 (http://qt-project.org/doc/qt-5/properties.html#dynamic-properties)이있는 .ui 파일이로드됩니다. UI를 파일은 다음과 같다 :QUiLoader 및 동적 속성 무시
<?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>
중요한 부분은 다음과 같습니다
<widget class="QComboBox" name="langCombo">
<property name="ScriptingLangCombo" stdset="0">
<bool>true</bool>
</property>
</widget>
내가 QUiLoader::load()
로 파일을로드하고 있습니다. 나는 QUiLoader
클래스를 확장 한,하지만 나는이 같은 각각의 위젯을 조회 할 수 있습니다 액세스 createWidget()
방법에 : 동적 속성이 completly 무시됩니다 것 같다 있도록
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를 인식합니다.
이 질문에
이미 2 회 전 /보고 된 질문을 받았다,하지만 해결책은 제공되지 않은 :- https://bugreports.qt-project.org/browse/QTBUG-11791?page=com.atlassian.streams.streams-jira-plugin:activity-stream-issue-tab
- http://www.qtcentre.org/threads/32013-QUiLoader-Problem-No-Dynamic-Properties-Support
어떤 아이디어?
P. 올바른 파일을로드했는지 확인했습니다. 3 번.
가장 간단한 예제 프로젝트에서이 작업을 테스트했지만이 작업은 내가 한 일 (createWidget() 또는 다른 것을 다시 구현)과 관련이 없음을 확인합니다. 이것은 QUiLoader의 버그입니다. 빌드시 UI 파일에서 C++ 코드로 양식을 생성 할 때 동적 속성이 올바르게 작동하지만 QUiLoader로로드 할 때 올바르게 작동하지 않습니다. – Googie
지금까지는 내 애플리케이션이 'QUiLoader'와는 별도로 UI 파일을로드하고'QXmlSimpleReader '로 파싱하여 내부의 모든 위젯에 대한 동적 속성 목록을 작성하는 방대한 해결책을 구현했습니다. 그런 다음, 재정의 된 버전의 QUiLoader :: createWidget()에서 모든 동적 속성을 위젯 이름에 기반한 위젯에 적용합니다. 불행히도 전체 솔루션을 여기에 붙여 넣지는 않을 것입니다. 내 해결 방법에도 불구하고, 원래의 질문이 남아 있습니다. 어쩌면 더 나은 해결책이있을 수 있습니다. – Googie