Qt 4 поставляется с инструментом uic3 для работы со старыми файлами .ui.Его можно использовать двумя способами:
- Для создания заголовков и исходного кода для виджета для реализации любых пользовательских сигналов и слотов, добавленных с использованием Qt Designer 3.
- Для создания нового пользовательского интерфейсафайл, который можно использовать с Qt Designer 4.
Вы можете использовать оба этих метода в комбинации для получения UI, заголовочных и исходных файлов, которые вы можете использовать в качестве отправной точки при портировании вашего пользовательского интерфейса на Qt4.
uic3 myform.ui > myform.h
uic3 -impl myform.h myform.ui > myform.cpp
Полученные файлы myform.h и myform.cpp реализуют форму в Qt 4, используя QWidget, который будет включать пользовательские сигналы, слоты и соединения, указанные в файле UI.Однако об ограничениях этого метода см. Ниже.
Второй метод заключается в использовании uic3 для преобразования файла QT Designer 3 .ui в формат Qt Designer 4:
uic3 -convert myform3.ui > myform4.ui
результирующий файл myform4.ui можно редактировать в Qt Designer 4. Файл заголовка для формы генерируется с помощью Qt 4.Смотрите информацию об предпочтительных способах использования форм, созданных с помощью Qt Designer 4, в главе «Использование файла пользовательского интерфейса дизайнера в вашем приложении» в Руководстве по Qt.
Примечание : существуют ограничения uic3:
Преобразование файлов пользовательского интерфейса Qt 3 в Qt 4 имеет некоторые ограничения.Наиболее заметным ограничением является тот факт, что поскольку uic больше не генерирует объект QObject, невозможно определить пользовательские сигналы или слоты для формы.Вместо этого программист должен определить эти сигналы и слоты в основном контейнере и подключить их к виджетам в форме после вызова setupUi ().Например:
class HelloWorldWidget : public QWidget, public Ui::HelloWorld
{
Q_OBJECT
public:
HelloWorldWidget(QWidget *parent = 0);
public slots:
void mySlot();
};
HelloWorldWidget::HelloWorldWidget(QWidget *parent)
: QWidget(parent)
{
setupUi(this);
QObject::connect(pushButton, SIGNAL(clicked()),
this, SLOT(mySlot()));
}
void HelloWorldWidget::mySlot()
{
...
}
Быстрый и грязный способ портировать формы, содержащие пользовательские сигналы и слоты, - генерировать код, используя uic3, а не uic.Поскольку uic3 генерирует QWidget, он заполняет его пользовательскими сигналами, слотами и соединениями, указанными в файле UI.Однако uic3 может генерировать код только из файлов пользовательского интерфейса Qt 3, что означает, что файлы пользовательского интерфейса никогда не переводятся и их необходимо редактировать с помощью Qt Designer 3.
Обратите внимание также на то, что можно создавать неявные соединения междувиджеты в форме и основной контейнер.После того, как setupUi () заполняет основной контейнер дочерними виджетами, он просматривает список слотов основного контейнера для имен с формой on_objectName_signalName ().
Если форма содержит виджет, имя объекта которого является objectName, и если этот виджетимеет сигнал под названием signalName, тогда этот сигнал будет подключен к слоту основного контейнера.Например:
class HelloWorldWidget : public QWidget, public Ui::HelloWorld
{
Q_OBJECT
public:
HelloWorldWidget(QWidget *parent = 0);
public slots:
void on_pushButton_clicked();
};
HelloWorldWidget::HelloWorldWidget(QWidget *parent)
: QWidget(parent)
{
setupUi(this);
}
void HelloWorldWidget::on_pushButton_clicked()
{
...
}
В соответствии с соглашением об именах, setupUi () автоматически подключает сигнал clickButton () clickButton к слоту on_pushButton_clicked () HelloWorldWidget.
Я получил это решение от http://qt.developpez.com/doc/4.7/porting4-designer/