基于LinuxQt4下自定义对话框的设计与实现
2017-09-18项伟
项伟
摘 要: Qt作为一个跨平台的C++图形用户界面(GUI)应用程序开发工具,在Linux系统中得到了广泛的应用。在使用Qt开发GUI应用程序时,经常需要设计和实现对话框窗口。在阐述了Qt特性、Linux Qt4环境搭建方法及Qt4标准对话框与自定义对话框的区别的基础上,介绍了用Qt4布局管理器实现用户界面的相关技术,分析了用Qt4设计自定义对话框的基本流程,完成了自定义对话框的设计与实现。
关键词: Qt; Linux Qt4; 对话框; 自定义对话框; 布局管理器
中图分类号:TP316.2 文献标志码:A 文章编号:1006-8228(2017)09-27-03
Abstract: Qt, as a cross-platform C++ graphical user interface (GUI) application development tool, has been widely used in Linux system. It is often necessary to design and implement the dialog window when developing GUI applications using Qt. The article expounds the characteristics of Qt and the method of setting up Linux Qt4 developing environment, and describes the difference between the Qt4 standard dialog and the custom dialog. On this basis, the article introduces the related technologies of using Qt4 layout manager to implement the user interface, analyzes the basic process of using Qt4 to design custom login dialog, and completes the design and implementation of custom dialog box.
Key words: Qt; Linux Qt4; dialog; custom dialog; layout manager
0 引言
Qt是由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能,既可以开发GUI程序,也可用于开发非GUI程序。Qt是一种面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器)以及一些宏,易于扩展,并且允许真正地组件编程[1]。
Linux是一款开源的多用户多任务操作系统[2],它是由全世界各地的成千上万的程序员借助于internet网络努力实现的UNIX类操作系统,以高效性和灵活性著称,又由于它是免费获得的,因此,现在越来越多的用户选择使用Linux操作系统。Linux在市场上有许多发行版本,所有的版本都包含一样的Linux内核、基本工具和应用[3],主流的发行版有Ubuntu、Fedora、Red Hat等。
1 Linux Qt4环境搭建
开发Qt程序需要在Linux中安装Qt,也就是在Linux系统下搭建Qt环境,用于在计算机上开发Qt应用程序。下面,笔者以在Ubuntu下安装Qt4进行操作。
1.1 Qt4安装
在Linux下安装应用软件最常用的操作方法就是在线在官网上下载软件安装包,用Linux命令进行安装。因此,安装Qt4需在官网(http://www.qt.io/download-open-source/)上免费获取Qt的源码包(以qt-everywhere-opensource-src-4.7.4.tar.gz为例),然后,将源代码库编译出所需要的Qt工具以及库文件。在编译之前,需要确保当前计算机的Linux系统已经安装了gcc、make等编译工具,具体操作步骤如下。
⑴ 将压缩包下载到某个路径(/usr)下解压。
tar xzvf qt-everywhere-opensource-src-4.7.4.tar.gz
⑵ 将目录切换至解压好的文件下。
cd qt-everywhere-opensource-src-4.7.4
⑶ 运行文件夹下的./configure,生成配置文件。在安装过程中选择开源(O)、YES选项。安装过程中会存在各种问题,需要及时解决,如:
安装g++、make:sudo apt-get install g++ make
安装libx11包:sudo apt-get install libx11-dev libxext-dev libxtst-dev
⑷ 運行make,会出现错误,需要安装libxrender-
dev库解决此错误。
⑸ 运行make install。
经过以上五个步骤,Qt默认安装到/usr/local/Trolltech/Qt-4.7.4目录中。
1.2 Qt4在Ubuntu下的配置
为了使用者在以后Qt开发中能更方便地使用Qt提供的qmake,moc等工具,需要把Qt的安装路径添加到PATH变量里,其具体操作步骤如下:
⑴ 用文本编辑器打开~/.bash_profile(此文件在当前用户的主目录下),在文件中添加:endprint
PATH=/usr/local/Trolltech/Qt-4.7.4/bin
export PATH
⑵ 修改完成后保存文件,运行以下命令使设置有效。
source ~/.bash_profile
⑶ 运行echo $PATH,查看添加的路径是否正确[4]。
1.3 Qt源程序的编译
将Qt4在Linux操作系统下配置完好后,使用者就可以在任意目录下编译Qt程序了,其编译过程如下。
⑴ 运行qmake -project,将所有的文件编译成一个与平台无关的工程文件。
⑵ 运行qmake,读取本身的Qt设置,生成与库一致的相应的Makefile。
⑶ 运行make,根据生成的Makefile,将文件编译为二进制可执行程序。
2 Qt4布局管理器
对于一个GUI用户界面来说,合理地安排每一个窗口子部件是很必要的,而在Qt程序设计界面中的部件不能够自动进行有序的排列,需利用Qt提供的绝对位置、手工布局、布局管理器3种方式确定窗口子部件的大小和位置。其中布局管理器是Qt界面程序开发中管理窗口子部件最好的方法,也是最实用的方法。
常用的布局管理器有:
⑴ 水平布局管理器QHBoxLayout,用于水平方向上从左到右组织管理窗口子部件;
⑵ 垂直布局管理器QVBoxLayout,用于垂直方向上从上到下组织管理窗口子部件;
⑶ 网格布局管理器QGridLayout,按二维的网格形式组织管理窗口子部件[5]。
在Qt下实现界面的设计,其实就是充分利用上面三种布局管理器来将窗口部件进行分类和排列。设计时先根据排列的效果创建对应布局管理器的布局对象,然后使用addWidget()方法,将部件添加至布局,并使用setLayout()方法把该布局管理器设置为窗口的布局管理器。
比如,若想使二个QPushButton按钮部件从左到右均匀显示,就使用QHBoxLayout水平布局管理器创建布局对象hLayout,再将这2个QPushButton按先后次序添加到hLayout布局中,效果如图1所示。若想使二个QPushButton按钮部件从上到下均匀显示,就使用QVBoxLayout垂直布局管理器创建布局对象vLayout,再将这二个QPushButton按先后添加到vLayout布局中,效果如图2所示。若想使二个QPushButton按钮不均匀显示,就使用QGridLayout网格布局管理器创建布局对象gLayout,再将这二个QPushButton分别按照其占行数、列数,位于几行几列等要素添加到gLayout布局中,效果如图3所示。若想使多个部件排列成更复杂的布局,如图4所示,可以采用在一个布局里嵌入另一个布局,在布局中使用addLayout()方法来添加布局,内部的布局就会变成它的子布局。针对图4的效果,可以先将粗虚线范围的部件设置为垂直布局管理器QVBoxLayout布局,再将细实线范围的部件设置为水平布局管理器QHBoxLayout布局,向QVBoxLayout布局中添加一个文本框部件和一个QHBoxLayout布局(也就是QHBoxLayout布局变成QVBoxLayout布局的子布局),向QHBoxLayout布局中添加二个QPushButton按钮部件。
总之,无论设计多么复杂的界面,我们都可以综合选用水平布局管理器QHBoxLayout、垂直布局管理器QVBoxLayout、网格布局管理器QGridLayout来实现。
3 Qt4标准对话框与自定义对话框
对话框是一种特殊的窗口,一般用来给用户提供反馈信息或者从用户接收输入信息,从而在用户和应用程序之间建立起交互的平台,在各种软件的使用中都会涉及,因此,能够灵活设计形形色色的对话框是非常重要的。
QDialog是所有Qt对话框窗口的基类,它继承自QWidget[6]。当然,在Qt4中不仅提供了文件对话框QFileDialog、颜色对话框QColorDialog、字体对话框QFontDialog等常用的内建对话框,还提供了消息对话框QMessageBox。设计者可以采用#include
4 Qt4自定义对话框设计与实现
我们以图5的登录对话框为例进行Qt4自定义对话框的分析与设计。
4.1 自定义对话框的总框架
登录对话框窗口是展现给用户操作的界面,设计成由二个标签框QLabel、二个文本框QLineEdit、二个命令按钮QPushButton三种类型的部件构成;通过单击二个命令按钮QPushButton分别实现登录和退出功能。
4.2 自定义对话框的算法
根据以上分析,创建login.h程序文件,定义继承QDialog类的Login用户类,该类具有二个标签框QLabel、二个文本框QLineEdit、二个命令按钮QPushButton这六个属性,loginClick()、exitClick()二个成员方法与一个loginInit()构造函数。
创建login.cpp程序文件,编写实现loginInit()、loginClick()、exitClick()功能代码。其中,loginInit()构造函数完成六个部件的属性值设置与利用Qt布局管理器技术实现Login用户类中六个部件的组织排列及其它,登录对话框整体是垂直布局QVBoxLayout组织,它由添加二个标签框QLabel、二个文本框QLineEdit的网格布局QGridLayout和二个命令按钮QPushButton的水平布局QHBoxLayout形成。
5 结束语
本文研究了在Linux系统下使用Qt4编程工具开发自定义对话框的基本流程与设计方法,以及实现的主要技术,并将其应用到登录对话框中,实现了在Linux Qt4下开发用户满意的自定义对话框。实践表明,该系统设计方案是行之有效的,其设计简洁,界面友好,功能完善。同时,Qt的优良特性保证了本系统高效性和跨平台性。
今后在实际应用中,还可以对程序进行改进,将对话框窗口部件排列進行优化处理,增强用户体验性。
参考文献(References):
[1] 百度.Qt的定义[EB/OL].2016-06-17.https://baike.so.
com/doc/2150643-2275491.html
[2] 刘金鹏.linux入门很简单[M].清华大学出版社,2012.
[3] 王丽洁.嵌入式Linux的图形界面技术研究与实现[D].国防科
技技术大学硕士学位论文,2006.
[4] 道客巴巴.嵌入式图形界面Qt-Linux编译环境搭建工作
[EB/OL].2013-03-08.http://www.doc88.com/p-
8179991960600.html
[5] 韩少云,奚海蛟,谌利.嵌入式Linux的Qt图形程序实战开发[M].
北京航空航天大学出版社,2012.
[6] 沙祥.嵌入式系统与Qt程序开发[M].机械工业,2017.