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