Взаимодействие с пользователем
Взаимодействие с пользователем
Второй пример показывает возможности взаимодействия пользователя с программой. Приложение представляет собой кнопку, которую пользователь может нажать и тогда приложение закончит свою работу. Исходный код этой программы очень напоминает исходный код программы Hello, но здесь вместо QLabel используется QPushButton в качестве главного виджета и добавляется код, обеспечивающий реакцию программы на действие пользователя (нажатие кнопки).
Исходный код этого приложения находится на компакт-диске в файле /examples/chap01/quit/quit.cpp. Ниже приводится содержимое этого файла:
01 #include <QAapplication>
02 #include <QPushButton.h>
03 int main(int argc, char *argv[])
04 {
05 QApplication app(argc, argv);
06 QPushButton *button = new QPushButton("Quit");
07 QObject::connect(button, SIGNAL(clicked()),
08 &app, SL0T(quit()));
09 button->show();
10 return app.exec();
11 }
Виджеты Qt генерируют сигналы[2] в ответ на выполнение пользователем какого-то действия или изменение состояния. Например, QPushButton генерируют сигнал clicked() при нажатии пользователем кнопки. Сигнал может быть связан с функцией (называемой слотом в данном контексте) для автоматического ее выполнения при получении данного сигнала. В нашем примере мы связываем сигнал кнопки clicked() со слотом quit() объекта приложения QApplication. Макросы SIGNAL() и SLOT() являются частью синтаксиса; более подробно они объясняются в следующей главе.
Рис. 1.3. Приложение Quit (завершить работу).
Теперь мы построим приложение. Мы предполагаем, что вами создан каталог quit и в нем находится файл quit.cpp. Выполните команду qmake из каталога quit для формирования файла проекта, затем используйте полученный файл для создания файла makefile:
qmake -project
qmake quit.pro
Теперь постройте приложение и запустите его на выполнение. Если вы нажмете кнопку quit или клавишу пробела на клавиатуре (она также приводит к нажатию этой кнопки), приложение завершит свою работу.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
2.6 Триумф интерфейса над пользователем?
2.6 Триумф интерфейса над пользователем? Косметических улучшений за тридцать лет существования парадигмы WIMP была придумана масса, а вот более или менее серьезных, при внимательном анализе, обнаруживается только два: интеграция звука (и превращение графической
2.6 Триумф интерфейса над пользователем?
2.6 Триумф интерфейса над пользователем? Косметических улучшений за тридцать лет существования парадигмы WIMP была придумана масса, а вот более или менее серьезных, при внимательном анализе, обнаруживается только два: интеграция звука (и превращение графической
Извлечение информации, введенной пользователем
Извлечение информации, введенной пользователем Для того чтобы выяснить, какой текст ввел пользователь в текстовом поле, программа должна извлекать свойства Value или Text. Обычно вы должны назначить свойства для строковой переменной с оператором, как показано ниже:strText BoxText =
1.3. Стоимостный анализ (ABC) и свойства, определяемые пользователем (UDP)
1.3. Стоимостный анализ (ABC) и свойства, определяемые пользователем (UDP) Как было указано ранее, обычно сначала строится функциональная модель существующей организации работы - AS-IS (Как есть). После построения модели AS-IS проводится анализ бизнес-процессов, потоки данных и
Функции, определенные пользователем
Функции, определенные пользователем Для сохранения своего малого объема Firebird поставляется с весьма скромным арсеналом встроенных (родных) функций трансформации данных. Пользователи могут писать свои собственные функции на известном им языке, таком как C/C++, Pascal или Object
Объекты, определенные пользователем
Объекты, определенные пользователем При восстановлении копии на сервер, отличный от того, с которого были сделаны копии, вы должны обеспечить существование на новом сервере наборов символов и порядков сортировки, на которые ссылается копия. Копия не может быть
6.2.3 Операции и Определяемые Пользователем Типы
6.2.3 Операции и Определяемые Пользователем Типы Функция операция должна или быть членом, или получать в качестве параметра по меньшей мере один объект класса (фунциям, которые переопределяют операции new и delete, это длать необязательно). Это правило гарантирует, что
6.3 Определяемое Пользователем Преобразование Типа
6.3 Определяемое Пользователем Преобразование Типа Приведенная во введении реализация комплексных чисел слишком ограничена, чтобы она могла устроить кого-либо, потому ее нужно расширить. Это будет в основном повторением описанных выше методов. Например:class complex (* double re, im;
8.2.2 Вывод Определяемых Пользователем Типов
8.2.2 Вывод Определяемых Пользователем Типов Рассмотрим определяемый пользователем тип:class complex (* double re, im; public: complex(double r = 0, double i = 0) (* re=r; im=i; *)friend double real(complex amp; a) (* returna.re; *) friend double real(complex amp; a) (* returna.re; *)friend complex operator+(complex, complex); friend complex operator-(complex, complex); friend complex operator*(complex, complex); friend
Получение пользователем билета TGT на билеты
Получение пользователем билета TGT на билеты В начале сеанса регистрации пользователь обращается к сервису аутентификации (Authentication Service - AS) Kerberos за получением билета TGT для ЦРК. Обмен сообщениями с сервисом AS не требует от пользователя А подтверждения своей
Аутентификация сервера пользователем
Аутентификация сервера пользователем Для того чтобы пользователь А, в свою очередь, мог аутентифицировать сервер, сервер В увеличивает на единицу значение времени из запроса пользователя А и вновь шифрует его при помощи ключа KAB. Этот шифртекст и является ответом