crossplatform.ru

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


  Ответ в Ошибка сегментации при работе с потомками формы.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kwisp Дата 20.2.2011, 9:26
 
Цитата(mva @ 20.2.2011, 0:24) *
grdTable = (TableView*)formWidget->findChild<QTableView*>("tableView");

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

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

может стоит добавить проверку : найден ли обЪект с данным именем? а дальше уже разбираться почему программа падает.
mva Дата 20.2.2011, 0:24
  Доброго времени суток всем!

Создаю форму с помощью такого кода:
    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 на этой форме. Именно иногда, не всегда.

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


Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.7.2025, 18:30