Чтение онлайн

на главную - закладки

Жанры

QT 4: программирование GUI на С++

Саммерфилд Марк

Шрифт:

Этот механизм работает следующим образом:

• макрос Q_OBJЕСТ объявляет некоторые функции, которые необходимы для анализа внутреннего состояния и которые должны быть реализованы в каждом подклассе QObject: metaObject, tr, qt_metacall и некоторые другие;

• компилятор moc генерирует реализации функций, объявленных макросом Q_OBJECT, и всех сигналов;

• такие функции—члены класса QObject, как connect и disconnect, во время своей

работы используют функции анализа внутреннего состояния.

Все это выполняется автоматически при работе qmake, moc и при компиляции QObject, и поэтому у вас крайне редко может возникнуть необходимость вспомнить об этом механизме. Однако если вам интересны детали реализации этого механизма, вы можете воспользоваться документацией по классу QMetaObject и просмотреть файлы исходного кода С++, сгенерированные компилятором moc.

До сих пор мы использовали сигналы и слоты только при работе с виджетами. Но сам по себе этот механизм реализован в классе QObject, и его не обязательно применять только в пределах программирования графического пользовательского интерфейса. Этот механизм можно использовать в любом подклассе QObject:

01 class Employee : public QObject

02 {

03 Q_OBJECT

04 public:

05 Employee { mySalary = 0; }

06 int salary const { return mySalary; }

07 public slots:

08 void setSalary(int newSalary);

09 signals:

10 void salaryChanged(int newSalary);

11 private:

12 int mySalary;

13 };

14 void Employee::setSalary(int newSalary)

15 {

16 if (newSalary != mySalary) {

17 mySalary = newSalary;

18 emit salaryChanged(mySalary);

19 }

20 }

Обратите внимание на реализацию слота setSalary. Мы генерируем сигнал salaryChanged только при выполнении условия newSalary ! = mySalary. Это позволяет предотвратить бесконечный цикл генерирования сигналов и вызовов слотов.

Быстрое проектирование диалоговых окон

Средства разработки Qt спроектированы таким образом, чтобы было приятно программировать «вручную» и чтобы этот процесс был интуитивно понятен; и нет ничего необычного в разработке всего приложения Qt на «чистом» языке С++. Все же многие программисты предпочитают применять визуальные средства проектирования форм, поскольку этот метод представляется более естественным и позволяет получать конечный результат быстрее, чем при программировании «вручную», и такой подход дает возможность программистам быстрее и легче экспериментировать и изменять дизайн.

Qt Designer расширяет возможности программистов, предоставляя визуальные средства проектирования. Qt Designer может

использоваться для разработки всех или только некоторых форм приложения. Формы, созданные с помощью Qt Designer, в конце концов представляются в виде программного кода на С++, поэтому Qt Designer может использоваться совместно с обычными средствами разработки, и он не налагает никаких специальных требований на компилятор.

В данном разделе мы применяем Qt Designer для создания диалогового окна (см. рис. 2.4), которое управляет переходом на заданную ячейку таблицы (Go-to-Cell dialog). Создание диалогового окна как при ручном кодирования, так и при использовании Qt Designer предусматривает выполнение следующих шагов:

• создание и инициализация дочерних виджетов;

• размещение дочерних виджетов в менеджерах компоновки;

• определение последовательности переходов по клавише табуляции;

• установка соединений «сигнал — слот»;

• реализация пользовательских слотов диалогового окна.

Рис. 2.4. Диалоговое окно для перехода на заданную ячейку таблицы.

Для запуска Qt Designer выберите функцию Qt by Trolltech v4.x.y | Designer в меню Start системы Windows, наберите designer в командной строке системы Unix или дважды щелкните по Designer в системе Mac OS X Finder. После старта Qt Designer выдает список шаблонов. Выберите шаблон «Widget», затем нажмите на кнопку ОК. (Привлекательным может показаться шаблон «Dialog with Buttons Bottom» (диалог с кнопками в нижней части), но в этом примере мы покажем, как создавать кнопки OK и Cancel вручную.) Вы получите на экране окно с заголовком «Untitled».

По умолчанию интерфейс пользователя в Qt Designer содержит несколько окон верхнего уровня. Если вы предпочитаете интерфейс в стиле MDI с одним окном верхнего уровня и несколькими подчиненными окнами, выберите функцию Edit | User Interface Mode | Docked Window.

На первом этапе создайте дочерние виджеты и поместите их в форму. Создайте одну текстовую метку, одну строку редактирования, одну (горизонтальную) pacпорку (spacer) и две кнопки. При создании любого элемента перенесите его название или пиктограмму из окна виджетов Qt Designer на форму приблизительно в то место, где он должен располагаться. Элемент распорка, который не будет видим при работе формы, в QtDesigner показан в виде синей пружинки.

Рис. 2.5. Qt Designer в режиме пристыкованного окна в системе Windows.

Затем передвиньте низ формы вверх, чтобы она стала короче. В результате вы получите форму, похожую на показанную на рис. 2.6. Не тратьте слишком много времени на позиционирование элементов на форме; менеджеры компоновки Qt позже выполнят точное их позиционирование.

Рис. 2.6. Форма с несколькими виджетами.

Поделиться:
Популярные книги

Жена со скидкой, или Случайный брак

Ардова Алиса
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Жена со скидкой, или Случайный брак

Осколки маски

Метельский Николай Александрович
7. Унесенный ветром
Фантастика:
боевая фантастика
альтернативная история
6.71
рейтинг книги
Осколки маски

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Горизонт Вечности

Вайс Александр
11. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Горизонт Вечности

Потомок бога 3

Решетов Евгений Валерьевич
3. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Потомок бога 3

Запечатанный во тьме. Том 1. Тысячи лет кача

NikL
1. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
Запечатанный во тьме. Том 1. Тысячи лет кача

Путь

Yagger Егор
Фантастика:
космическая фантастика
4.25
рейтинг книги
Путь

Ученик. Книга третья

Первухин Андрей Евгеньевич
3. Ученик
Фантастика:
фэнтези
7.64
рейтинг книги
Ученик. Книга третья

Хозяин Теней 5

Петров Максим Николаевич
5. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Теней 5

Я не царь. Книга XXIV

Дрейк Сириус
24. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я не царь. Книга XXIV

Сильнейший Столп Империи. Книга 5

Ермоленков Алексей
5. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 5

Кодекс Охотника. Книга XXII

Винокуров Юрий
22. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXII

Чевенгур

Платонов Андрей Платонович
Проза:
советская классическая проза
6.75
рейтинг книги
Чевенгур

Новые горизонты

Лисина Александра
5. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Новые горизонты