将qt3转换为qt4的步骤
如何使用uic3以清晰的步骤将qt3格式转换为qt4格式?qt4随工具uic3提供,用于处理旧的.ui文件。它可以通过两种方式使用:将qt3转换为qt4的步骤,qt4,Qt4,如何使用uic3以清晰的步骤将qt3格式转换为qt4格式?qt4随工具uic3提供,用于处理旧的.ui文件。它可以通过两种方式使用: 为小部件生成头文件和源代码,以实现使用Qt Designer 3添加的任何自定义信号和插槽 生成可与Qt Designer 4一起使用的新UI文件 您可以结合使用这两种方法来获取UI、头文件和源文件,这些文件可以作为将用户界面移植到Qt4的起点 uic3 myform.ui > myform.h uic3 -impl myform.h myform.ui
- 为小部件生成头文件和源代码,以实现使用Qt Designer 3添加的任何自定义信号和插槽
- 生成可与Qt Designer 4一起使用的新UI文件
uic3 myform.ui > myform.h
uic3 -impl myform.h myform.ui > myform.cpp
结果文件myform.h和myform.cpp使用QWidget实现Qt4中的表单,QWidget将包括UI文件中指定的自定义信号、插槽和连接。但是,有关此方法的限制,请参见下文
第二种方法是使用uic3将Qt Designer 3.ui文件转换为Qt Designer 4格式:
uic3 -convert myform3.ui > myform4.ui
生成的文件myform4.ui可以在Qt Designer 4中编辑。表单的头文件由Qt4的uic生成。有关使用Qt Designer 4创建的表单的首选方法的信息,请参阅Qt Designer手册应用程序一章中的使用Designer UI文件
注意:uic3有以下限制:
将Qt3UI文件转换为Qt4有一些限制。最明显的限制是,由于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()
{
...
}
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()
{
...
}
移植包含自定义信号和插槽的表单的一种快速而肮脏的方法是使用uic3而不是uic生成代码。由于uic3确实生成QWidget,因此它将使用UI文件中指定的自定义信号、插槽和连接填充它。但是,uic3只能从Qt3UI文件生成代码,这意味着这些UI文件永远不会被翻译,需要使用QtDesigner3进行编辑
还请注意,可以在表单中的小部件和主容器之间创建隐式连接。在setupUi()用子窗口小部件填充主容器后,它将扫描主容器的插槽列表,以查找具有\u objectName\u signalName()格式的名称
如果表单包含一个对象名为objectName的小部件,并且该小部件有一个名为signalName的信号,那么该信号将连接到主容器的插槽。例如:
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()
{
...
}
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()自动将按钮的clicked()信号连接到HelloWorldWidget的on_Button_clicked()插槽
我从Qt4中获得了这个解决方案,它附带了用于处理旧的.ui文件的工具uic3。它可以通过两种方式使用:
- 为小部件生成头文件和源代码,以实现使用Qt Designer 3添加的任何自定义信号和插槽
- 生成可与Qt Designer 4一起使用的新UI文件
uic3 myform.ui > myform.h
uic3 -impl myform.h myform.ui > myform.cpp
结果文件myform.h和myform.cpp使用QWidget实现Qt4中的表单,QWidget将包括UI文件中指定的自定义信号、插槽和连接。但是,有关此方法的限制,请参见下文
第二种方法是使用uic3将Qt Designer 3.ui文件转换为Qt Designer 4格式:
uic3 -convert myform3.ui > myform4.ui
生成的文件myform4.ui可以在Qt Designer 4中编辑。表单的头文件由Qt4的uic生成。有关使用Qt Designer 4创建的表单的首选方法的信息,请参阅Qt Designer手册应用程序一章中的使用Designer UI文件
注意:uic3有以下限制:
将Qt3UI文件转换为Qt4有一些限制。最明显的限制是,由于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()
{
...
}
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()
{
...
}
移植包含自定义信号和插槽的表单的一种快速而肮脏的方法是使用uic3而不是uic生成代码。由于uic3确实生成QWidget,因此它将使用UI文件中指定的自定义信号、插槽和连接填充它。但是,uic3只能从Qt3UI文件生成代码,这意味着这些UI文件永远不会被翻译,需要使用QtDesigner3进行编辑
还请注意,可以在表单中的小部件和主容器之间创建隐式连接。在setupUi()用子窗口小部件填充主容器后,它将扫描主容器的插槽列表,以查找具有\u objectName\u signalName()格式的名称
如果表单包含一个对象名为objectName的小部件,并且该小部件有一个名为signalName的信号,那么该信号将连接到主容器的插槽。例如:
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()
{
...
}
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()自动将按钮的clicked()信号连接到HelloWorldWidget的on_Button_clicked()插槽
我从获得了这个解决方案,Qt文档应该有东西给你吗?你查过了吗?Qt文档应该为您提供一些信息?你查过了吗?