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

Работа с 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, иначе все изменения в нём будут потеряны.



Содержание раздела