Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка сегментации при работе с потомками формы.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
mva
Доброго времени суток всем!

Создаю форму с помощью такого кода:
    QFile file(fileName + ".ui");
    if (file.open(QIODevice::ReadOnly)) {
        QUiLoader loader;
        loader.addPluginPath("./plugins/");
        QWidget* widget = loader.load(&file);
        file.close();
        if (QString(widget->metaObject()->className()).compare("QDialog") == 0) {
            formWidget = (QDialog*)widget;
            formWidget->setParent(pwgt);
            formWidget->setVisible(false);
            formWidget->setWindowFlags(Qt::Window | Qt::Dialog | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowContextHelpButtonHint);
            ...
        }
        ...
    }


Все объекты на форме оформлены в виде плагинов. Проблема в том, что программа иногда спотыкается по ошибке сегментирования на следующей строчке кода:

grdTable = (TableView*)formWidget->findChild<QTableView*>("tableView"); ,

который ищет объект типа TableView на этой форме. Именно иногда, не всегда.

Что посоветуете сделать в такой ситуации? Может быть что-то в коде загрузки формы подправить? Что можно еще предпринять?


kwisp
Цитата(mva @ 20.2.2011, 0:24) *
grdTable = (TableView*)formWidget->findChild<QTableView*>("tableView");

с какой целью ты пользуешься Си-подобным приведением типа, если судя по документации к функции findChild должно работать так:
grdTable = formWidget->findChild<TableView*>("tableView");

по идее если обЪект с данным именем не найден то функция вернёт нулевой указатель на тип QTableView а ты его принудительно приводишь к типу TableView* в итоге все равно получить ноль должен.

может стоит добавить проверку : найден ли обЪект с данным именем? а дальше уже разбираться почему программа падает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2019 IPS, Inc.