Вход/Регистрация
QT 4: программирование GUI на С++
вернуться

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

Шрифт:

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

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

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

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

Рис. 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, не позволяя пользователю изме-

От составителя. Страница №42 в исходном DjVu была пропущена! У кого есть — вставьте.

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

• можно непосредственно воспользоваться виджетом окно с вкладками QTabWidget. Здесь сверху окна имеется полоска вкладок, которая находится под управлением стека QStackedWidget;

• можно совместно использовать список QListWidget и стек QStackedWidget, где текущий элемент списка будет определять страницу, показываемую стеком QStackedWidget, обеспечив связь сигнала QListWidget::currentRowChanged со слотом QStackedWidget::setCurrentIndex;

  • Читать дальше
  • 1
  • ...
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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