关闭

QT4 designer生成的头文件的优化

标签: qt优化uisignalclass
1461人阅读 评论(0) 收藏 举报

        前面的文章中举了一个用QT Designer作QT程序界面设计的例子,但使用UIC转出来的头文件代码比较凌乱,看起来太累,如果做的是稍复杂一点的界面程序,放一段时间自己再来看,怕是要花不少时间,最好是对这个头文件做一些优化。下面以上篇文章的例子来说明一下如何优化。

       首先看看main.cpp中调用头文件中设计好的窗口的过程:

        QWidget w;
        Ui::Form ui;
        ui.setupUi(&w);        
        ui.show();

        在这当中,UI通过查看form.h可以得知是创建的命名空间,Form是从Ui_Form生成的类,setupUi是界面的初始化函数。这段代码中定义了一个QWidget对象,将其传递到UI_Form中使用setup_Ui对其进行界面初始化。

        那么,我们可以做这样的修改,直接定义一个QWidget派生的子类,它的初始化过程与setup_Ui一致,于是,form.h可以修改为如下:

#ifndef FORM_H
#define FORM_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QPushButton>
#include <QtGui/QWidget>
#include <QtGui/QDialog>


class Ui_Form:public QWidget
{
public:
    Ui_Form();  
    QPushButton *pushButton;
};

#endif

      这里定义了一个Ui_form类,原来的UI命名空间去掉了,Ui_Form是从QWidget派生出来的,可以直接在定义后使用show函数使其显示,main.cpp就可以更改为

#include <qapplication.h>
#include <qwidget.h>
#include "form.h"
int main(int argc, char **argv)
{
        QApplication app(argc, argv);
        Ui_Form ui;
        ui.show();
        return app.exec();
}
      这里,将不再在form.h中定义初始化的过程的实现,而是将初始化过程的代码放在了新建的form.cpp文件中,该文件内容如下:
#include "form.h"
Ui_Form::Ui_Form()
{
    if (this->objectName().isEmpty())
        this->setObjectName(QString::fromUtf8("Form"));
    this->resize(400, 300);
    pushButton = new QPushButton(this);
    pushButton->setObjectName(QString::fromUtf8("pushButton"));
    pushButton->setGeometry(QRect(40, 230, 75, 23));
    this->setWindowTitle(QApplication::translate("Form", "Form", 0, QApplication::UnicodeUTF8));
    pushButton->setText(QApplication::translate("Form", "PushButton", 0, QApplication::UnicodeUTF8));
    QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(close()));
    Q_UNUSED(this);
}

        可以看出来,这其中的Ui_Form()是实现Ui_Form类的构造函数,它的代码与原来的setup_Ui()几乎一致,区别在于用this代替了setup_Ui()中作为参数传递进来的Form,另外将setup_Ui()中被调用的retranslateUi()函数合并过来了。

        做完这些修改后,保存,编译,运行,与直接原来使用UIC生成的头文件的程序完全一样,但其代码更容易看明白。

     

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:47657次
    • 积分:656
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:0篇
    • 译文:0篇
    • 评论:16条
    文章分类
    最新评论