Qt Designer的进阶使用

http://blog.csdn.net/mao19931004/article/details/52070912

熟悉Qt的人或多或少的都会使用Qt Designer(以下简称Designer),在Qt中,提供了一个用于可视化设计软件的界面的过程,使用Designer,你会减少使用代码来设计界面的过程,当然更多的时候是结合着代码以及Designer两者,从而实现较好的界面,对于熟悉MFC的人,对于生成的窗体上拖拽控件应该是非常的熟悉的,本文的侧重点不是介绍Designer的基本使用,而是笔者在使用过程中摸索出有关于Designer的比较好的使用技能,希望可以帮助大家使用Designer;本文实现的环境是VS2010+Qt5.5.1

1、技能一 ===> 如何将设计的窗体在类中使用

一般来说,我们在使用Qt创建一个Widget的应用的时候,都会给我们创建一个MainWindow的窗体,最简单的只有一个窗体的应用,当然在这上面进行开发就可以了,但是当我们需要更多的窗体的时候,总不能每一个都是去自定义一个窗体类,然后在这个窗体类设计窗体的布局和控件,这样将会非常的耗时,因此需要设计的窗体应用到类中,因此就观察了在创建Qt 的Widget应用的时候,创建工程时,在工程目录下会用三个文件夹界面文件、头文件、以及源文件。当我们点击编译运行后,生成的软件目录下,会有一个关于窗体的文件,即ui_<你的窗口对象名>.h,这个是Form File(.ui)文件的生成的窗体类的原始代码,而这个代码是和我们自己用代码实现窗体是一样的。因此可以形成一下思路:

<====通过Designer设计的窗体在编译后,形成以ui打头关于form设计的头文件,然后通过引用头文件,在自定义类中构建窗体 ====>

具体的过程:

1、通过Designers设计好窗体,本文设计例子如下:

2、点击编译运行,实际上调用了Qt安装目录下一个uic的工具去编译生成有关于窗体(.ui)的C++的头文件,以ui_打头;

3、在自定义类中调用窗体的头文件:ui_portSel.h:

首先添加自定义类:一般类名保持与窗口名一致,即portSel

然后点击确定后,最关键的部分来了,如何引用呢? 很简单,三行代码即可搞定

首先在头文件portsel.h文件中,包含ui的头文件,本例是#include"ui_portsel.h" :

然后在portSel的类声明的private属性中添加Form文件的声明

这个是和ui_头文件保持一致的,可以打开ui文件查看:

最后在portSel类的构造函数中,调用setUp函数即可,这个函数也是ui头文件中的

main函数,我们应用这个窗体类:

2、技能二 ===> 将C++代码自定义的窗口类应用到Designer

很多时候,Qt的原生部件是无法满足我们的设计需求的,因此需要在原有控件类的基础上,派生自己定义的类,从而达到自己的设计需求。但是如果将自定义的控件应用到Designer中,从而发挥Designer快捷布局和设计UI的特性呢,这个也是笔者在使用的时候经常使用的。

以下以设计一个Button为例,需求是:除了原有QPushButton的特性之外,即显示文本以及Icon,还需要选择一定的状态信息,即点击该按钮以后,打开其他窗口进行设置后,可以显示一定的有关于设置的状态信息,以下是设计的最后结果:

可以看见,显示了[OFF]的状态信息,具体实现过程如下:

1、首先派生自己的Button类,头文件内容如下:

  1. #ifndef CAMERASETBUTTON_H  
  2. #define CAMERASETBUTTON_H  
  3.   
  4. #include <QPushButton>  
  5. class QLabel;  
  6. class CameraSetButton : public QPushButton  
  7. {  
  8.     Q_OBJECT  
  9.   
  10. public:  
  11.     CameraSetButton(QWidget *parent=0);  
  12.     ~CameraSetButton();  
  13.     void setStatus(QString statusInfo);  
  14. private:  
  15.     QLabel *status;  
  16. };  
  17.   
  18. #endif // CAMERASETBUTTON_H  

2、实现内容:

  1. #include "camerasetbutton.h"  
  2. #include<QLabel>  
  3. #include<QRect>  
  4. #include<QHBoxLayout>  
  5. CameraSetButton::CameraSetButton(QWidget *parent)  
  6.     : QPushButton(parent)  
  7. {  
  8.     this->setMinimumSize(200,50);  
  9.     this->setContentsMargins(0,0,0,0);  
  10.     //-----------------------------------------/  
  11.     status = new QLabel(this);  
  12.     QRect btn_rect=this->geometry();  
  13.     int x=btn_rect.bottomRight().x()-40;  
  14.     int y=btn_rect.bottomRight().y()-(this->height()/3)*2;  
  15.     status->setGeometry(x,y,70,20);  
  16.     //-------------------------------------------//  
  17. }  
  18.   
  19. CameraSetButton::~CameraSetButton()  
  20. {  
  21.   
  22. }  
  23.   
  24. void CameraSetButton::setStatus(QString statusInfo)  
  25. {  
  26.     status->setText(statusInfo);  
  27. }  

3、最后最关键的部分是将类应用在Designer的布局中,首先我们继承的是QPushButton,因此该自定义类只能用在QPushButton的提升上;

在Designer的QPushButton中,提升窗口的部件:


接着选择提升的类:



注意这里的类就是刚刚我们自己定义的类,最后点击添加就可以了,然后我们就可以在文件中使用了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值