crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Ошибка сегментации при работе с потомками формы.
mva
  опции профиля:
сообщение 20.2.2011, 0:24
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Доброго времени суток всем!

Создаю форму с помощью такого кода:
    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
  опции профиля:
сообщение 20.2.2011, 9:26
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


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

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

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

может стоит добавить проверку : найден ли обЪект с данным именем? а дальше уже разбираться почему программа падает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 13.11.2019, 9:55