Доброе время суток, уважаемые специалисты.
В книге Ж.Бланшетт и М.Саммерфилда "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.
Хотелось бы понять в чем ошибка. Заранее благодарю за помощь.