Саммерфилд Марк - QT 4: программирование GUI на С++ стр 10.

Шрифт
Фон

Полученный файл ui_gotocelldialog.h содержит определение класса Ui::GoToCellDialog , который содержит инструкции С++, эквивалентные файлу gotocelldialog.ui . В этом классе объявляются переменныечлены, в которых содержатся дочерние виджеты и менеджеры компоновки формы, а также функция setupUi() , которая инициализирует форму. Сгенерированный класс выглядит следующим образом:

class Ui::GoToCellDialog

{

public:

QLabel *label;

QLineEdit *lineEdit;

QSpacerItem *spacerItem;

QPushButton *okButton;

Эти дочерние элементы, в свою очередь, сами удалят все свои дочерние элементы, и эта процедура будет выполняться до тех пор, пока ничего не останется.

Механизм взаимодействия объекта с родительскими и дочерними элементами значительно упрощает управление памятью, снижая риск утечек памяти. Явным образом мы должны удалять только объекты, которые созданы оператором new и которые не имеют родительского элемента. А если мы удаляем дочерний элемент до удаления его родителя, то Qt автоматически удалит этот объект из списка дочерних объектов этого родителя.

Для виджетов родительский объект имеет дополнительный смысл: дочерние виджеты размещаются внутри области, которую занимает родительский объект. При удалении родительского виджета не только освобождается занимаемая дочерними объектами память он исчезает с экрана.

В конце конструктора мы подключаем кнопку OK к слоту accept() виджета QDialog и кнопку Cancel к слоту reject(). Оба слота закрывают диалог, но accept() устанавливает результат диалога на значение QDialog::Accepted (которое равно 1), a reject() устанавливает значение QDialog::Rejected (которое равно 0). При использовании этого диалога мы можем использовать значение результата, чтобы узнать, была ли нажата кнопка OK, и действовать соответствующим образом.

Слот on_lineEdit_textChanged() устанавливает кнопку OK в активное или неактивное состояние в зависимости от наличия в строке редактирования допустимого обозначения ячейки. QLineEdit::hasAcceptableInput() использует функцию проверки допустимости значений, которую мы задали в конструкторе.

На этом завершается построение диалога. Теперь мы можем переписать main.cpp следующим образом:

01 #include <QApplication>

02 #include "gotocelldialog.h"

03 int main(int argc, char *argv[])

04 {

05 QApplication app(argc, argv);

06 GoToCellDialog *dialog = new GoToCellDialog;

07 dialog->show();

08 return app.exec();

09 }

Постройте еще раз приложение (qmake project; qmake gotocell.pro ) и выполните его. Наберите в строке редактирования значение «A12» и обратите внимание на то, как кнопка OK становится активной. Попытайтесь ввести какой-нибудь произвольный текст и посмотрите, как сработает функция по проверке допустимости значения. Нажмите кнопку Cancel для закрытия диалогового окна.

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

Изменяющиеся диалоговые окна

расширяемые диалоговые окна (area extension dialogs) многостраничные диалоговые окна (multipage dialogs). Qt Designer.

Расширяемые диалоговые окна, как правило, имеют обычное (нерасширенное) представление и содержат кнопку для переключения между обычным и расширенным представлениями этого диалогового окна. Расширяемые диалоговые окна обычно применяются в тех приложениях, которые предназначаются как для неопытных, так и для опытных пользователей и скрывают дополнительные опции до тех пор, пока пользователь явным образом не захочет ими воспользоваться. В данном разделе мы используем Qt Designer для создания расширяемого

размер) двух вертикальных растяжек установите на значение [20, 0].

В результате менеджер компоновки в ячейках сетки будет иметь два столбца и четыре строки всего восемь ячеек. Элемент группа первичного ключа, левая вертикальная распорка, элемент группа вторичного ключа и элемент группа третичного ключа каждый из них занимает одну ячейку. Менеджер вертикальной компоновки, содержащий кнопки OK, Cancel и More, занимает две ячейки. Справа внизу диалогового окна будет две свободные ячейки. Если у вас получилась другая картинка, отмените компоновку, измените положение виджетов и повторите все сначала.

Рис. 2.12. Расположение дочерних элементов формы в сетке.

Переименуйте форму на «SortDialog» (диалоговое окно сортировки) и измените заголовок на «Sort» (сортировка). Задайте имена дочерним виджетам, как показано на рис. 2.13.

Выберите функцию меню Edit | Edit Tab Order. Щелкайте поочередно по каждому выпадающему списку, начиная с верхнего и заканчивая нижним, затем щелкайте по кнопкам OK, Cancel и Моге, которые расположены справа. Выберите функцию меню Edit | Edit Widgets для выхода из режима установки переходов по клавише табуляции.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке