Жасмин Бланшет - QT 4: программирование GUI на С++ стр 12.

Шрифт
Фон

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

Рис. 2.11. Размещение дочерних виджетов группового элемента в табличной сетке.

5. Перетащите правый край второго поля с выпадающим списком так, чтобы оно было в два раза шире первого поля.

6. Свойство title (заголовок) группы установите на значение "&PrimaryKey" (первичный ключ), свойство text первой текстовой метки установите на значение "Column:" (столбец), а свойство text второй текстовой метки установите на значение "Order:" (порядок сортировки).

7. Щелкните правой клавишей мышки по первому полю с выпадающим списком и выберите функцию Edit Items (редактировать элементы) в контекстном меню для вызова в Qt Designer редактора списков. Создайте один элемент со значением "None" (нет значений).

8. Щелкните правой клавишей мышки по второму полю с выпадающим списком и выберите функцию Edit Items. Создайте элементы "Ascending" (по возрастанию) и "Descending" (по убыванию).

9. Щелкните по группе и выберите в меню функцию Form | Lay Out in a Grid (Форма | Размещение в сетке). Еще раз щелкните по группе и выберите в меню функцию Form | Adjust Size (Форма | Настроить размер). В результате получите изображение, представленное на рис. 2.11 (б).

Если изображение оказалось не совсем таким или вы ошиблись, то всегда можно выбрать в меню функцию Edit | Undo (Правка | Отменить) или Form | Break Layout (Форма | Прервать компоновку), затем изменить положение виджетов и снова повторить все действия.

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

1. Увеличьте высоту диалогового окна, чтобы можно было в нем разместить дополнительные части.

2. При нажатой клавише Ctrl (Alt в системе Mac) щелкните по элементу группы Primary Key (первичный ключ) для создания копии элемента группа (и его содержимого) над оригинальным элементом. Перетащите эту копию ниже оригинального элемента группа, по-прежнему нажимая клавишу Ctrl (или Alt). Повторите этот процесс для создания третьего элемента группа, размещая его ниже второго элемента группа.

3. Измените их свойство title на значения "&Secondary Key" (вторичный ключ) и "&Tertiary Key" (третичный ключ).

4. Создайте одну вертикальную растяжку и расположите ее между элементом группы первичного ключа и элементом группы вторичного ключа.

5. Расположите виджеты в сетке, как показано на рис. 2.12 (а).

6. Щелкните по форме, чтобы отменить выбор любых виджетов, затем выберите функцию меню Form | Lay Out in a Grid (Форма | Расположить в сетке). Форма должна иметь вид, показанный на рис. 2.12 (б).

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

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

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

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

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

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

Теперь, когда форма спроектирована, мы готовы обеспечить ее функциональное наполнение, устанавливая некоторые соединения "сигнал-слот". Qt Designer позволяет устанавливать соединения между виджетами одной формы. Нам требуется обеспечить два соединения.

Выберите функцию меню Edit | Edit Signals/Slots (Правка | Редактировать сигналы и слоты) для входа в режим формирования соединений в Qt Designer. Соединения представлены синими стрелками между виджетами формы. Поскольку нами выбран шаблон "Dialog with Buttons Right", кнопки OK и CanceI уже подключены к слотам accept() и reject() виджета QDialog. Эти соединения также указаны в окне редактора сигналов и слотов Qt Designer.

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

Рис. 2.13. Имена виджетов формы.

Для установки соединения между двумя виджетами щелкните по виджету, передающему сигнал, соедините красную стрелку с виджетом - получателем сигнала и отпустите клавишу мышки. В результате будет выдано диалоговое окно, позволяющее выбрать для соединения сигнал и слот.

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

Рис. 2.14. Соединение виджетов формы.

Сначала устанавливается соединение между moreButton и secondaryGroupBox. Соедините эти два виджета красной стрелкой, затем выберите toggled(bool) в качестве сигнала и setVisible(bool) в качестве слота. По умолчанию Qt Designer не имеет в списке слотов setVisible(bool), но он появится, если вы включите режим "Show all signals and slots" (Показывать все сигналы и слоты).

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

Рис. 2.15. Редактор соединений в QtDesigner.

Второе соединение устанавливается между сигналом toggled(bool) виджета moreButton и слотом setVisible(bool) виджета tertiaryGroupBox. После установки соединения выберите функцию меню Edit | Edit Widgets для выхода из режима установки соединений.

Сохраните диалог под именем sortdialog.ui в каталоге sort. Для добавления программного кода в форму мы будем использовать тот же подход на основе множественного наследования, который нами применялся в предыдущем разделе для диалога "Go-to-Cell".

Сначала создаем файл sortdialog.h со следующим содержимым:

01 #ifndef SORTDIALOG_H

02 #define SORTDIALOG_H

03 #include <QDialog>

04 #include "ui_sortdialog.h"

05 class SortDialog : public QDialog, public Ui::SortDialog

06 {

07 Q_OBJECT

08 public:

09 SortDialog(QWidget *parent = 0);

10 void setColumnRange(QChar first, QChar last);

11 };

12 #endif

Затем создаем sortdialog.cpp:

01 #include <QtGui>

02 #include "sortdialog.h"

03 SortDialog::SortDialog(QWidget *parent)

04 : QDialog(parent)

05 {

06 setupUi(this);

07 secondaryGroupBox->hide();

08 tertiaryGroupBox->hide();

09 layout()->setSizeConstraint(QLayout::SetFixedSize);

10 setColumnRange('А', 'Z');

11 }

12 void SortDialog::setColumnRange(QChar first, QChar last)

13 {

14 primaryColumnCombo->clear();

15 secondaryColumnCombo->clear();

16 tertiaryColumnCombo->clear();

17 secondaryColumnCombo->addItem(tr("None"));

18 tertiaryColumnCombo->addItem(tr("None"));

19 primaryColumnCombo->setMinimumSize(

20 secondaryColumnCombo->sizeHint());

21 QChar ch = first;

22 while (ch <= last) {

23 primaryColumnCombo->addItem(QString(ch));

24 secondaryColumnCombo->addItem(QString(ch));

25 tertiaryColumnCombo->addItem(QString(ch));

26 ch = ch.unicode() + 1;

27 }

28 }

Конструктор прячет ту часть диалогового окна, где располагаются поля второго и третьего ключей. Он также устанавливает свойство sizeConstraint менеджера компоновки формы на значение QLayout::SetFixedSize, не позволяя пользователю изме-

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

0
Шрифт
Фон

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