QT 4: программирование GUI на С++ | страница 36



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

>01 #ifndef SORTDIALOG_H

>02 #define SORTDIALOG_H

>03 #include

>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

>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();

• можно виджет древовидной структуры QTreeWidget совместно использовать со стеком