QT程序中引入designer自定义窗口部件

本文介绍了如何使用QTdesigner工具快速绘制UI界面,并通过uic编译工具将UI文件(.ui)转换为C++源文件(ui_xx.h),最后详细解释了如何在程序中引入生成的窗口部件,包括直接使用、单一继承和多重继承三种方式,以及创建.pro工程以简化集成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为一个科班出生的程序猿,总喜欢亲力亲为,包括UI也总要通过代码实现。但是QT designer提供了一种高效率、简洁美观的绘制UI的方法,总有它存在的必要和优点吧。所以,今天操刀来把绘制的UI文件(.ui格式)引入自己的工程中。

(一)绘制xx.ui

作为一款所见即所得的UI绘制工具,qt designer足够强大和简易,新建一个文件保存该ui文件。qt designer怎么用不是今天的重点,傻瓜式的操作,呵呵。

注意:

(1)部件的命名要符合自己的一贯风格,方便后续开发。

(2)顶层窗口部件的objectName就是xx.ui文件生成的ui_xx.h文件中Ui命名空间自动产生的类名。

比如在绘制xx.ui时,我把顶层窗口命名为finddialog,那么通过uic生成的ui_xx.h文件自动命名的类名就为finddialog


其他的问题遇到再补充。


(二)uic编译工具编译xx.ui

这一步成功的关键是正确配置qmake工具,在安装QT 时就要注意,如果qmake工具变量配置不正确,重新配置环境变量。

我在win7下: 打开 qt command prompt会提示一些配置好的环境变量:


(1)如果qmake工具配置正确,打开qmake,windows下打开QT安装时产生的 qt command prompt即可。

(2)切换到保存xx.ui文件的目录下

windows下切换路径相比linux有点蛋疼,要再确定盘符才能进入目录:


(三)uic -o ui_xx.h xx.ui

调用UIC编译工具将XML的xx.ui文件编译成C++源文件:ui_xx.h

注意命名规则:ui_xx.h

执行完后,工作目录中中会产生ui_xx.h文件,打开看看:


(1)自动生成的注释,提示修改该文件无效。自动添加用到的头文件。


(2)头文件定义了一个POD(plain old data)类Ui_finddialog,所用到的部件都声明为public,所以,你可以放心的继承该类,放心的直接调用其成员。


(3)头文件里定义了几个内联函数,是公有函数。最重要的就是函数setUi(),它对传入的窗口部件设置标题、大小、子部件和窗口和布局等,并作为顶层窗口部件,该函数还限制了传入窗口部件的类型,该类型是绘制xx.ui时顶层窗口的类型。所以在绘制xx.ui时考虑清楚选择什么类型作为顶层窗口。


(4)自动生成一个Ui命名空间,在该命名空间里共有继承了自动生成的类Ui_xx,新的类名就是顶层窗口的objectName。



(四)在程序中引入生成的窗口部件,生成.pro工程

注意:此时还没有建立.pro工程,只有一个头文件。

引入生成的窗口部件其实就是该如何使用生成的类。

有三种方式:

(1)直接使用

直接把生成的头文件当做普通头文件,只不过不用实现.cpp文件啦,放在自己的程序中使用。

(2)单一继承

在QT creator中直接创建带UI文件的工程时,默认采用单一继承的方式。把UI文件产生的类当做私有成员,其内联函数通过类名调用。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


(3)多重继承

(五)直接使用的例子

(1)在工作目录下新建main.cpp空白文件,使用喜欢的编辑器编辑该文件,调用ui_xx.h

#include<QApplication>
#include<QDialog>
#include "ui_finddialog.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Ui::finddialog ui;
	QDialog *dialog = new QDialog;
	ui.setupUi(dialog);
	dialog->show();
	return app.exec();
}

要点:添加头文件,调用生成类和共有函数。测试程序,这里先不考虑内存泄露问题。

(2)qmake -project

该命令生成一个和之前新建保存xx.ui文件的文件夹名一样的.pro文件,所以文件夹命名也要注意。

######################################################################
# Automatically generated by qmake (2.01a) ?? ?? 7 20:44:34 2014
######################################################################

TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .

# Input
FORMS += finddialog.ui
SOURCES += main.cpp


修改该.pro文件:

加入头文件:

HEADERS +=ui_finddialog.h

(3).pro修改完成后,在QT IDE下编译即可,运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值