Шаг 170.
Библиотека Qt.
Применение спроектированных диалоговых окон

    На этом шаге рассмотрим способы применения диалоговых окон в Qt: как они создаются и инициализируются и как реагируют на действия пользователя при работе с ними.

    Мы будем использовать диалоговые окна поиска (шаг 149), перехода к ячейке (шаг 153) и сортировки (шаг 159). Мы также создадим простое окно About (справка о программе).

    Начнем с диалогового окна Find (Найти), показанного на рисунке 1 шаг 149. Поскольку мы хотим, чтобы пользователь имел возможность свободно переключаться с главного окна приложения Электронная таблица на диалоговое окно Найти и обратно, это диалоговое окно должно быть немодальным. Немодальным называется окно, которое может работать независимо от других окон приложения.

    Немодальные диалоговые окона обычно имеют свои сигналы, соединенные со слотами, которые реагируют на действия пользователя. Диалоговое окно Найти позволяет пользователю выполнять поиск текста в электронной таблице. Слот find() вызывается при выборе пользователем пункта меню Правка/Найти для вывода на экран диалогового окна Найти. После этого возможны три сценария развития событий в зависимости от следующих условий:

void MainWindow::find()
{
/*Если нет диалогового окна Нати, мы создаем его. Мы могли бы также создать это
диалоговое окно в конструкторе MainWindow, но отсрочка его создания ускоряет запуск
приложения. Кроме того, если это диалоговое окно никогда не будет использовано,
то оно и не будет создаваться, что сэкономит время и память*/
    if (!findDialog) {
        findDialog = new FindDialog(this);
/*Его функции findNext() и findPrevious() подсоединяем к соответствующим слотам
электронной таблицы Spreadsheet*/
        connect(findDialog, SIGNAL(findNext(const QString &,
                                            Qt::CaseSensitivity)),
                spreadsheet, SLOT(findNext(const QString &,
                                           Qt::CaseSensitivity)));
        connect(findDialog, SIGNAL(findPrevious(const QString &,
                                                Qt::CaseSensitivity)),
                spreadsheet, SLOT(findPrevious(const QString &,
                                               Qt::CaseSensitivity)));
    }
/*Затем вызываем функции show(), raise() и activateWindow() и тем самым
делаем это окно видимым поверх других и активным. Чтобы сделать скрытое окно видимым
поверх других и активным, достаточно вызвать функцию show(), но диалоговое окно Find
может вызываться, когда оно уже имеется на экране. В этом случае функция show()
ничего не будет делать, и необходимо вызвать raise() и activateWindow()*/
    findDialog->show();
    findDialog->raise();
    findDialog->activateWindow();
} 

    На следующем шаге продолжим рассматривать применение ранее спроектированных диалоговых окон.




Предыдущий шаг Содержание Следующий шаг