Russian Qt Forum
Ноябрь 25, 2024, 10:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: SIGSEGV при попытке отобразить диалоговое окно  (Прочитано 1968 раз)
alphawell
Гость
« : Август 11, 2015, 11:06 »

Доброе время суток, уважаемые специалисты.

В книге Ж.Бланшетт и М.Саммерфилда "C++ GUI Programming with Qt 4, Second Edition" (часть 1 "Basic Qt", глава 3 "Creating Main Windows" подраздел "Using Dialogs") в  приведен следующий код для отображения диалогового окна (ранее созданного на основе QDialog) при выполнении соответствующей команды меню главного окна приложения:
Код
void MainWindow::find()
{
   if (!findDialog) {
       findDialog = new FindDialog(this);
       connect(findDialog, SIGNAL(findNext(const QString &,
...
   }
 
   findDialog->show();
   findDialog->raise();
   findDialog->activateWindow();
}
 

Хотелось бы для начала понять что за конструкция приведена в качестве условной для оператора if. Логично предположить, что это некая проверка того, был ли ранее выполнен конструктор данного объекта, но в документации по классу QDialog я таких членов-функций в его составе не нашел. Информации, приведенной в книге также недостаточно:
Цитировать
If the Find dialog doesn't already exist, we create it and connect its findNext() and findPrevious() signals to the corresponding Spreadsheet slots.

Основная же проблема заключается в том, что реализовав подобную конструкцию в своем коде, я, при попытке запустить программу, получаю ошибку, под отладчиком выдает SIGSEGV Segmentation fault. Отладчик показывает на строку, следующую после тела конструкции ветвления (setModal(true)):

Код
void MainWindow::configureLayers()
{
   if (!layersDialog) {
   layersDialog = new layersConfigDialog(this);
   }
 
   layersDialog->setModal(true);
   layersDialog->show();
   layersDialog->activateWindow();
}
 

Класс layersConfigDialog создан на базе QDialog в полном соответствии с примерами из книги. configureLayers (как и find в первом случае) это private-слот класса MainWindow.
Хотелось бы понять в чем ошибка. Заранее благодарю за помощь.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Август 11, 2015, 11:15 »

Видимо, ты в конструкторе не инициализируешь findDialog нулем.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
alphawell
Гость
« Ответ #2 : Август 11, 2015, 11:51 »

Видимо, ты в конструкторе не инициализируешь findDialog нулем.

Благодарю Вас, помогло.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.062 секунд. Запросов: 25.