Добрый день всем!
У меня есть форма в виде отдельного файла .ui, которая загружается в программу по ходу работы. На этой форме имеются созданные мной виджеты. Форма была сгенерирована самой программой, при этом загружается в QtDesigner нормально и нормально в нем отображается. Проблема в том, что форма работает не стабильно, через раз выпадая по ошибке сегментирования.
Вот так я загружаю форму:
QDialog* formWidget;
...
QFile file(fileName + ".ui");
if (file.open(QIODevice::ReadOnly)) {
QUiLoader loader;
loader.addPluginPath("./plugins/");
QWidget* widget = loader.load(&file);
if (QString(widget->metaObject()->className()).compare("QDialog") == 0) {
formWidget = (QDialog*)widget;
...
}
...
}
QList<QPushButton*> widgets = formWidget->findChildren<QPushButton*>();
Давай код ui. Там будем разбираться )
Содержимое ui файла такое:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>dialog</class>
<widget class="QDialog" name="dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>593</height>
</rect>
</property>
<property name="name" stdset="0">
<string>Справочник.vw_список_топер</string>
</property>
<property name="caption" stdset="0">
<string>Справочник. Типовые операции</string>
</property>
<layout class="QVBoxLayout" name="vbxLayout">
<item>
<layout class="QHBoxLayout">
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Параметры для поиска:</string>
</property>
</widget>
</item>
<item>
<widget class="SearchParameters" name="searchParameters"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="hbxLayout">
<item>
<widget class="TableView" name="tableView"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="cmdButtonLayout">
<item>
<widget class="QPushButton" name="buttonAdd">
<property name="text">
<string>Вставить</string>
</property>
<property name="icon">
<iconset resource="../../src/resources.qrc">
<normaloff>:/buttonAdd</normaloff>:/buttonAdd</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="buttonRequery">
<property name="text">
<string>&Обновить</string>
</property>
<property name="icon">
<iconset>
<normaloff>:buttonRequery</normaloff>
<normalon>:buttonRequery</normalon>
<activeoff>:buttonRequery</activeoff>
<activeon>:buttonRequery</activeon>
<selectedoff>:buttonRequery</selectedoff>
<selectedon>:buttonRequery</selectedon>:buttonRequery</iconset>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="buttonOk">
<property name="text">
<string>&Принять</string>
</property>
<property name="icon">
<iconset>
<normaloff>:buttonOk</normaloff>
<normalon>:buttonOk</normalon>
<activeoff>:buttonOk</activeoff>
<activeon>:buttonOk</activeon>
<selectedoff>:buttonOk</selectedoff>
<selectedon>:buttonOk</selectedon>:buttonOk</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="buttonCancel">
<property name="text">
<string>&Отменить</string>
</property>
<property name="icon">
<iconset>
<normaloff>:buttonCancel</normaloff>
<normalon>:buttonCancel</normalon>
<activeoff>:buttonCancel</activeoff>
<activeon>:buttonCancel</activeon>
<selectedoff>:buttonCancel</selectedoff>
<selectedon>:buttonCancel</selectedon>:buttonCancel</iconset>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>TableView</class>
<extends>QTableView</extends>
<header>tableview.h</header>
</customwidget>
<customwidget>
<class>SearchParameters</class>
<extends>QFrame</extends>
<header>searchparameters.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../../src/resources.qrc"/>
</resources>
<connections/>
</ui>
Кажется решил проблему. Заменил
QList<QPushButton*> widgets = formWidget->findChildren<QPushButton*>();
на
QList<QPushButton*> widgets = qFindChildren<QPushButton*>(formWidget);
Вроде бы глючить случайным образом перестало. Но корень проблемы по-прежнему не ясен.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)