Основы программирования в Linux
Шрифт:
Имейте в виду, что сигналы Qt отличаются от сигналов UNIX, обсуждавшихся в главе 11.
Вот как устроено программирование, управляемое событиями: графический интерфейс пользователя состоит из меню, панелей инструментов, кнопок, полей ввода и множества других элементов GUI, называемых виджетами. Когда пользователь взаимодействует с виджетом, например, активизирует пункт меню или вводит какой-то текст в поле ввода, виджет порождает именованный сигнал, такой как
Применение сигналов и слотов довольно специфично — Qt определяет два новых соответствующим образом описанных псевдоключевых слова,
Таким образом, программный код с использованием Qt — не настоящий программный код на С++. Порой это становится проблемой для некоторых разработчиков. См. документацию Qt на Web-сайте http://doc.trolltech.com/, чтобы понять причину применения этих новых псевдоключевых слов в С++. Более того, применение сигналов и слотов не так уж отличается от Microsoft Foundation Classes (MFC, библиотека базовых классов Microsoft) в ОС Windows, в которой также используется модифицированное определение языка С++.
На способы применения сигналов и слотов в Qt есть несколько ограничений, но они не слишком существенные:
сигналы и слоты должны быть функциями-методами класса-потомка
при использовании множественного наследования
оператор
сигналы нельзя применять в шаблонах;
указатели на функцию не могут использоваться как аргументы в сигналах и слотах;
сигналы и слоты не могут переопределяться или обновляться до статуса
Поскольку вы должны писать ваши сигналы и слоты как потомков объекта
Типичное определение класса в файле MyWindow.h для вашего GUI будет напоминать приведенное далее:
Ваш класс — наследник объекта
У вас есть один сигнал и один слот, оба без параметров. Для порождения сигнала
Это означает, что все остальное обрабатывается Qt. Вам даже не потребуется реализация
Для применения слотов их нужно связать с сигналом. Делается это соответствующим образом с помощью названного статического метода
Просто передайте объект, владеющий сигналом (отправитель), функцию сигнала, объект, владеющий слотом (приемником), и в завершение укажите имя слота.
В примере MyWindow, если бы вы захотели связать сигнал
Учтите, что необходимо применять макросы
Остается реализовать ваш слот в виде обычной функции-метода:
Выполните упражнение 17.2.
Теперь, зная основы использования сигналов и слотов, применим их в примере. Усовершенствуйте
1. Введите следующее объявление класса и назовите файл ButtonWindow.h:
2. Далее следует реализация класса в файле ButtonWindow.cpp:
Ермак. Телохранитель
2. Ермак
Фантастика:
альтернативная история
рейтинг книги
Граф Книга третья
10. Ученик
Фантастика:
фэнтези
попаданцы
рейтинг книги
Дважды одаренный
1. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
рейтинг книги
Проданная Истинная. Месть по-драконьи
Любовные романы:
любовно-фантастические романы
рейтинг книги
Первый среди равных. Книга III
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Развод в 45. От любви до ненависти
6. Развод
Любовные романы:
остросюжетные любовные романы
рейтинг книги
Сирота
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
рейтинг книги
Эпоха Опустошителя. Том I
1. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
1941, Великая Отечественная катастрофа: Итоги дискуссии
Документальная литература:
военная документалистика
рейтинг книги
Лекарь Империи 3
3. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
рейтинг книги
Кровь на клинке
3. Шатун
Фантастика:
боевая фантастика
попаданцы
альтернативная история
рейтинг книги
Кодекс Охотника. Книга XIV
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Аристократ из прошлого тысячелетия
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Одержимый
Top Thriller
Детективы:
триллеры
маньяки
рейтинг книги