QT4 designer生成的头文件的优化

原创 2007年10月06日 20:35:00

        前面的文章中举了一个用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生成的头文件的程序完全一样,但其代码更容易看明白。

     

Qt JSON 文件生成与解析

最近需要在Qt中解析修改保存JSON格式的文件来完成相关工作,网友分享的这篇文章很实用,特此记录下来,方便自己下次查找。 简述 Qt5 中包含了处理 JSON 的类,均以 QJson 开头(例...
  • iamplane
  • iamplane
  • 2017年07月25日 19:18
  • 701

编写Qt Designer自定义控件(四)——使用自定义控件

接上文:编写Qt Designer自定义控件(二)——给自定义控件添加属性         控件编写完毕以后,把生成的dll和lib文件一起拷贝到Qt安装目录下的插件目录里,比如我安装在D盘里的Qt...
  • giselite
  • giselite
  • 2013年10月11日 19:47
  • 13080

QT4升级到Qt5后,包含文件更改总结

参考链接:   QtDoc 5.0: C++ API changes https://qt-project.org/doc/qt-5.0/qtdoc/sourcebreaks.html   ...
  • jinbaippdpdpdpdpd
  • jinbaippdpdpdpdpd
  • 2016年05月29日 16:48
  • 1620

使用Qt Designer生成的界面进行国际化编程

Qt Designer国际化需要做的操作 首先,提取源文件中要翻译的字符串生成.ts文件,手动翻译,生成一个.qm文件。其次,程序中使用QTranslator安装翻译文件。 具体步...
  • imxiangzi
  • imxiangzi
  • 2015年08月27日 21:39
  • 1056

QT编程入门之QT designer

这篇文章着眼于QT编程的一个入门级介绍,主要关注如何尽快创建一个基于qt的应用程序和界面开发。        如果你想快速的了解qt,那么本篇文章适合你。它将引导你一步步创建一个基本的qt程序和界面,...
  • acs713
  • acs713
  • 2013年07月17日 18:13
  • 38158

QT4学习之designer的初步使用

主机环境:linux 内核版本:2.6.32-220.el6.i686 一、启动designer  在桌面环境下, 也就是/etc/inittab文件中启动级别为5. 只有在桌面环境下才...
  • u011791262
  • u011791262
  • 2014年03月17日 17:07
  • 648

编写Qt Designer自定义控件(四)——使用自定义控件

编写Qt Designer自定义控件(四)——使用自定义控件 分类: Qt2013-10-11 19:47 4190人阅读 评论(10) 收藏 举报 接上文:编写Qt Design...
  • jolin678
  • jolin678
  • 2015年06月09日 14:09
  • 1377

Qt4 to Qt5(持续更新)

新的一年开始了,我也决定将工作环境从Qt4迁移到Qt5,据说Qt4到Qt5是比Qt3到Qt4 easy不少,最大的变动是QWidget。 1,修改路径系统。Qt4 的 QtGUI下很多类被独立到wi...
  • a826319028
  • a826319028
  • 2014年02月18日 10:59
  • 1952

使用Qt Designer创建界面

转载地址:http://blog.csdn.net/rl529014/article/details/51364457 在博客 “在Qt中使用C++代码创建界面”  (地址:http...
  • wang15061955806
  • wang15061955806
  • 2017年06月12日 22:53
  • 231

Altium Designer应用技巧3: 按功能模块名生成位号

前面两篇日志介绍了在Altium Designer中使用功能模块的方法,但还有一个问题始终困扰我们,就是功能模块中的位号如果设置不当会与原理图中的器件位号相冲突。原先的解决方法是尽量让功能模块中的位号...
  • qingwufeiyang12346
  • qingwufeiyang12346
  • 2015年06月25日 23:27
  • 1514
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QT4 designer生成的头文件的优化
举报原因:
原因补充:

(最多只允许输入30个字)