Программирование на C++ с использованием библиотеки Qt4



         

Листинг 14. Работа с ui-ресурсом (файлы examples-qt/06/06.h и 06.cpp)


// В заголовочном файле *.h: #include <QDialog> #include "ui_dialog.h"

class MyDialog : public QDialog, private Ui::Dialog { Q_OBJECT public: MyDialog(QWidget *parent=0); };

// В файле *.cpp: MyDialog::MyDialog(QWidget *parent) : QDialog(parent) {

setupUi(this);

cb->addItem(tr("Первый")); cb->addItem(tr("Второй")); cb->addItem(tr("Третий")); cb->setCurrentIndex(2);

// ........ }

int main(int argc, char *argv[]) { QApplication app(argc, argv); QTextCodec *codec = QTextCodec::codecForName("CP1251"); QTextCodec::setCodecForTr(codec);

MyDialog *dlg = new MyDialog(); dlg->show(); return app.exec(); }

Как видим, к элементам диалога можно обращаться по тем именам, которые были указаны для них в QtDesigner.

Соединения между сигналами и слотами для класса MyDialog можно определять как обычно, с помощью метода connect (например, в конструкторе класса MyDialog), при этом пользовательские слоты должны быть перечислены в объявлении класса или унаследованы от базовых классов. Но можно воспользоваться особым правилом именования слотов: private slots: on_ИмяВиджета_ИмяСигнала(ПараметрыСигнала); В этом случае соединение между сигналом и слотом будет выполнено автоматически (в методе setupUi(), который генерируется утилитой uic). Например: // В заголовочном файле *.h: #include <QDialog> #include "ui_dialog.h"

class MyDialog : public QDialog, public Ui::Dialog { Q_OBJECT public: MyDialog(QWidget *parent=0); private slots: void on_rb3_toggled(bool s); };

// В файле *.cpp: void MyDialog::on_rb3_toggled(bool s) { dte->setHidden(s); } В результате при выборе радиокнопки rb3 поле ввода даты/времени будет спрятано, а при выборе любой другой радиокнопки -- снова показано.

Оба описанных варианта компоновки внешнего ресурса с основной программой являются статическими: после компиляции программы ui-файл можно удалить. Существует и вариант динамической загрузки во время выполнения программы (листинг 15). Здесь используется класс QUiLoader. При этом требуется подключить заголовочный файл QtUiTools, а в файле проекта *.pro -- добавить строку CONFIG += uitools

После редактирования pro-файла не следует выполнять qmake с параметром -project, иначе все изменения в нём будут потеряны.




Содержание  Назад  Вперед