首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将qt3转换为qt4的步骤

将qt3转换为qt4的步骤
EN

Stack Overflow用户
提问于 2011-04-12 09:57:55
回答 1查看 1.7K关注 0票数 2

如何以清晰的步骤使用qt3将qt4格式转换为uic3格式?

EN

回答 1

Stack Overflow用户

发布于 2015-08-24 09:23:46

Qt 4附带了用于处理旧的uic3文件的工具.ui。它可以通过两种方式使用:

  • 为小部件生成头部和源代码,以实现使用Qt设计器3.
  • 添加的任何自定义信号和插槽,以生成一个新的UI文件,该文件可与Qt设计器4.

一起使用。

您可以结合使用这两种方法来获得UI、头文件和源文件,在将用户界面移植到Qt 4时,可以使用这些文件作为起点。

代码语言:javascript
复制
uic3 myform.ui > myform.h
uic3 -impl myform.h myform.ui > myform.cpp

生成的文件myform.h和myform.cpp使用QWidget实现Qt 4中的表单,该QWidget将包括UI文件中指定的自定义信号、插槽和连接。但是,有关此方法的局限性,请参见下面的内容。

第二种方法是使用uic3将3 .ui文件转换为4格式:

代码语言:javascript
复制
 uic3 -convert myform3.ui > myform4.ui

生成的文件myform4.ui可以在Qt 4中编辑。表单的头文件由Qt4的uic生成。有关使用Qt 4创建的表单的首选方法的信息,请参阅Qt手册应用程序一章中的“使用设计器UI文件”。

Note:uic3有一些限制:

将Qt3UI文件转换为Qt4有一些限制。最明显的限制是,由于uic不再生成QObject,因此无法为表单定义自定义信号或插槽。相反,程序员必须在主容器中定义这些信号和槽,并在调用setupUi()之后将它们连接到表单中的小部件。例如:

代码语言:javascript
复制
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只能从Qt3UI文件生成代码,这意味着UI文件永远不会被翻译,需要使用Qt 3进行编辑。

还请注意,可以在窗体中的小部件和主容器之间创建隐式连接。在setupUi()用子小部件填充主容器之后,它用表单on_objectName_signalName()扫描主容器的插槽列表中的名称。

如果表单包含一个对象名为objectName的小部件,如果该小部件有一个名为signalName的信号,则该信号将连接到主容器的插槽。例如:

代码语言:javascript
复制
 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()自动将按钮的点击()信号连接到HelloWorldWidget的on_pushButton_clicked()槽。

我从http://qt.developpez.com/doc/4.7/porting4-designer/那里得到了这个解决方案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5633434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档