2.2 搭建Linux下的Qt开发环境

Qt最大的特点就是跨平台,在Linux下开发Qt程序也是一线开发中的常事,所以要学会在Linux下搭建Qt开发环境。本章我们将在CentOS 7下搭建Qt开发环境。建议初学者在虚拟机中安装CentOS 7,安装完毕后做好快照,这样即使安装Qt失败,也能恢复到CentOS 7刚安装完的状态。

2.2.1 准备虚拟机Linux

要开发Linux程序,前提是需要一个Linux操作系统。通常在公司中都会有一台专门的Linux服务器供大家使用,自己学习时则不需要这样,可以使用虚拟机软件(比如VMware)来安装一个虚拟机中的Linux操作系统。

VMware是大名鼎鼎的虚拟机软件,通常分为两种版本:工作站版本VMware Workstation和服务器客户机版本VMware vSphere。这两种软件都可以在其中安装操作系统作为虚拟机操作系统,但笔者用得较多的是工作站版本,供单人在本机使用。VMware vSphere通常用于企业环境,供多个人远程使用。通常,我们把自己真实PC上安装的操作系统叫宿主机系统,VMware中安装的操作系统叫虚拟机系统。

1. 在VMware下安装Linux

要开发Linux程序,往往先要在虚拟机中安装Linux操作系统,然后在这个虚拟机的Linux系统中编程和调试Linux程序,也可以在宿主机系统(比如Windows)中进行编写程序,然后传到Linux中进行编译。有了虚拟机的Linux系统,开发的灵活性比较大。实际上,不少一线开发项目师都是在Windows下阅读和编辑程序代码,然后放到Linux环境中编译和运行,这种开发方式的效率还不低!

这里我们采用的虚拟机软件是VMware Workstation 12。在安装之前要准备Linux安装映像文件,可以从网上直接下载Linux操作系统的ISO文件,也可以通过UltraISO等软件从Linux系统光盘制作一个ISO文件,制作方法是在菜单上选择“工具→制作光盘映像文件”。

建议直接从网上下载一个ISO文件,笔者就从乌班图官网(ubuntu.com/)下载了一个64位的ISO,下载下来的文件是ubuntu-18.04.3-desktop-amd64,文件大小大概有2GB。用其他Linux发行版本也可以,如Redhat、Debian、Fedora等,不过建议大家和笔者选择的Linux发行版本一样,尤其是初学者。

ISO文件准备好了以后,就可以通过VMware来安装Linux了。打开VMware Workstation,然后参照下面几个步骤操作即可。

(1)在VMware Workstation(笔者采用的版本:12.5.7 build-5813279)上选择菜单“文件→新建虚拟机”,如图2-72所示。

(2)单击“下一步”按钮,出现“安装客户机操作系统”对话框,选中“稍后安装操作系统”单选按钮,如图2-73所示。

图2-72

图2-73

(3)单击“下一步”按钮,出现“选择客户机操作系统”界面,选择客户机操作系统为Linux、版本为“Ubuntu 64位”,如图2-74所示。

(4)单击“下一步”按钮,出现“命名虚拟机”界面,在这里输入虚拟机名称为ubuntu-1804,位置为E:\vm,如图2-75所示。

图2-74

图2-75

注意,要确保选择的磁盘容量大一些,比如有空闲空间30多吉字节(GB)。然后单击“下一步”按钮,出现“指定磁盘容量”界面,保持默认设置,如图2-76所示。

(5)单击“下一步”按钮,出现“已准备好创建虚拟机”界面,在该界面上单击“完成”按钮,此时将重新回到VMware的ubuntu-1804界面中,再单击“编辑虚拟机设置”选项,如图2-77所示。

图2-76

图2-77

(6)出现“虚拟机设置”对话框,在该对话框上选择“硬件”选项卡,然后在左边设备列表里选择CD/DVD(SATA),接着在右边“连接”选项组中选中“使用ISO映像文件”单选按钮,单击“浏览”按钮,选择磁盘上的ubuntu-18.04.3-desktop-amd64.iso,如图2-78所示。

图2-78

建议把内存调整为2GB(如果计算机中的物理内存足够大),单击图2-78中的“内存”即可出现调节按钮。然后单击“确定”按钮,重新回到VMware的ubuntu-1804界面中,此时单击“开启此虚拟机”选项,而后就会正式开始安装(密码暂设为123456),安装过程如图2-79~图2-85所示。

图2-79

图2-80

图2-81

图2-82

图2-83

图2-84

图2-85

2. 启用root账户

刚安装好的ubutun18是不启用root账号的,这对我们以后操作会造成不少麻烦,因为有权限的问题。对于学习者自己的本机系统而言,完全可以使用root账户登录并操作系统。

启用root账户的基本步骤如下:

(1)使用命令sudo passwd root设置root的密码。在桌面上右击,在弹出的快捷菜单中选择“打开终端”命令,然后在终端窗口中输入命令“sudo passwd root”,接着输入tom账户的密码和要设置的root账户的密码,如图2-86所示。

其中,密码都输入123456。

(2)使用su root来测试是否可以进入root账户,如果出现#,则说明已经成功设置好root账户的密码,如图2-87所示。

图2-86

图2-87

其中,密码输入123456,这个密码是我们上一步为root账户设置的密码。现在我们处于root权限下,可以修改一些文件了。

(3)进入/etc/pam.d/目录,使用gedit gdm-autologin命令来编辑这个文件,将文件中的“auth required pam_succeed_if.so user != root quiet_success”注释掉后再保存文件(注释的方法是在该行开头添加#),如图2-88所示。

图2-88

用同样的方法编辑文件/etc/pam.d/gdm-autologin,将这个文件中的“auth required pam_succeed_if.so user != root quiet_success”注释掉后再保存文件,如图2-89所示。

图2-89

(4)编辑文件/root/.profile,将这个文件的最后一行修改为“tty-s && mesg n || true”,也就是在mesg前面添加“tty-s &&”。然后保存文件退出编辑器,如图2-90所示。

(5)在终端窗口输入reboot命令重启系统。

(6)重启进入系统后,出现的登录界面如图2-91所示。

图2-90

图2-91

单击“未列出”,然后在出现的用户名中输入root,并单击“下一步”按钮,如图2-92所示。再输入密码123456,就可以进入系统了。然后打开一个终端,可以看到命令提示符是#,并且@前面是root,如图2-93所示。

图2-92

图2-93

3. 安装VMware Tools

VMware Tools是VMware workstation软件的一个小工具,安装了这个小工具后,可以方便宿主机和虚拟机之间的信息交互,比如相互复制粘贴数据、相互拖放文件。建议把这个工具安装在root账户下。

在VMware中,依次单击菜单选项“虚拟机→安装VMware tools”,1秒后虚拟机Ubuntu桌面上会出现一个光驱的图标,如图2-94所示。

图2-94

右击这个图标打开它,把该虚拟光盘里的“VMwareTools10.1.6-5214329.tar.gz”复制到主目录中(直接拖放到“主目录”中即可),如图2-95所示。

图2-95

进入主目录,在空白处右击,启动终端程序,在终端窗口中输入tar解压缩命令进行文件的解压缩,如图2-96所示。

图2-96

进入目录vmware-tools-distrib,并执行脚本文件vmware-install.pl就开始安装了,如图2-97所示。

图2-97

安装过程会询问一些问题,在第一个问题处输入“yes”,其他保持默认设置,按回车键即可。当出现“what is the location of the "ifconfig"program on your machine?”时直接输入“yes”,再按回车键。当出现如图2-98所示的提示信息时就表示安装成功了。

图2-98

此时重启系统,复制一个Windows下的文件,再粘贴到虚拟机Ubuntu中,发现可以粘贴进去就表示安装和设置成功了。

4. 调整分辨率

刚安装完的虚拟机Ubuntu的分辨率默认只有800×600,这使得虚拟机的窗口很小。我们需要调整分辨率。

在桌面上右击,在弹出的快捷菜单中选择“更换背景”命令,弹出来的窗口就会最大化,此时很不好操作,因此双击窗口的标题栏,让窗口处于非最大化状态,然后在左边打开下拉列表,选择“设备”选项,就可以看到“分辨率”,如图2-99所示。

图2-99

我们可以根据自己的显示器设置一个合适的分辨率。单击“800×600(4:3)”,此时会弹出来竖条窗口,上面有一个滑动按钮,用鼠标控制滑到合适的分辨率,然后单击右上方的“应用”按钮。笔者选择的是“1440×900”分辨率。

5. 设置禁止锁屏

如果用户在5分钟内没有任何操作,刚安装完的Ubuntu 18.04将恢复到登录界面,这个过程叫锁屏。此时要进入系统就要再次输入账户和密码,非常烦琐。对于学习开发而言,为了避免这种烦琐的反复登录,我们可以设置禁止锁屏。具体的设置步骤如下:

(1)打开设置。单击在桌面右上角的向下箭头,这个小箭头比较小,它位于关机按钮右边,如图2-100所示。

此时会出现一个下拉窗口,单击左下方的扳手图标,如图2-101所示。

图2-100

图2-101

随后将出现设置窗口。注意,该窗口出现时将自动显示上一次关闭该窗口时的子页面,如果是子页面,我们要先回到设置的主页面,可以单击左上角的后退按钮,以确保看到左上角有“设置”二字,这就说明是设置窗口的主页面了,如图2-102所示。

(2)选择电源,设置“从不”。在设置窗口的左边列表中选择“电源”,然后在右边“节电”的“空白屏幕(B)”中选择“从不”,如图2-103所示,这样就不会自动锁屏了。

图2-102

图2-103

当然也可以设置一个较长的时间,这样比较平衡,既能省电又不会频繁锁屏,毕竟默认的5分钟相对而言有点太短了。

最后关闭设置窗口。

2.2.2 下载Qt 5.12.2

基本的安装和设置已经完成了,下面可以让Qt正式登场了。在编写本书的时候,Qt的最新版本是5.12.2。可以到以下两个地址下载Qt 5.12.2:

https://download.qt.io/archive/qt/

http://download.qt-project.org/official_releases/qt/5.12/5.12.2/

进到网页后选中qt-opensource-linux-x64-5.12.2.run,然后开始下载,大概有1.36GB,稍等片刻即可下载完成,下载下来的文件是qt-opensource-linux-x64-5.12.2.run。

如果下载下来的文件存放到Windows中,下一步还需要把它存放到虚拟机Ubuntu中去。在虚拟机的桌面上,单击左边工具栏第三个按钮来打开文件资源管理器,如图2-104所示。

在新出现的文件资源管理器窗口中单击左边的“主目录”,然后单击右上角查询图标旁的排列图标,如图2-105所示。

这样操作主要是可以在窗口中留出更多空白区域以方便我们新建文件夹。在空白处新建文件夹,并将这个文件夹命名为soft,然后用鼠标双击之,进入这个文件夹,然后把前面下载到Windows下的qt-opensource-linux-x64-5.12.2.run文件复制并粘贴到该文件夹中。注意,粘贴进度条即使消失了,也要稍等一会才能真正完成粘贴操作。操作一切正常的话,选中该文件后,它的右下角会显示出1.5GB,如图2-106所示。

图2-104

图2-105

图2-106

这样,下载下来的Qt安装包就复制粘贴到虚拟机Ubuntu中了。

2.2.3 下载安装依赖包

在安装前,我们先要联网安装一些依赖性软件包,免得安装Qt的过程中提示这个找不到那个找不到。在终端窗口中,依次输入如下命令,每个命令输入后都会自动安装,如果有询问,就采用默认值。

2.2.4 安装Qt

依赖包安装完毕后,就可以开始安装Qt了。打开终端窗口,进入到/root/soft下,然后为文件qt-opensource-linux-x64-5.12.2.run添加执行权限:

    [root@localhost soft]#chmod+x qt-opensource-linux-x86-5.4.1.run

添加执行权限后,就可以开始安装Qt 5.12了。继续运行命令:

    [root@localhost soft]# ./qt-opensource-linux-x64-5.12.2.run

然后就会出现安装向导窗口,如图2-107所示。

单击Next按钮,在下一个界面上选中I accept the service terms,然后单击Skip按钮,再单击“下一步”按钮,进入“安装文件夹”界面,保持默认设置,安装到/opt/Qt5.12.2路径下,如图2-108所示。

然后单击Next按钮,出现“选择组件”界面,选中“Qt 5.12.2”,如图2-109所示。其中,第二项Developer and Designer Tools主要是安装Qt Creator这个集成开发软件。

再单击“下一步”按钮,出现协议界面,选中下方的第一个选项,如图2-110所示。

再单击“下一步”按钮,出现“已做好安装准备”对话框,单击“安装”按钮,就开始漫长的安装,等安装完成,单击“完成”按钮退出即可。

图2-107

图2-108

图2-109

图2-110

2.2.5 配置环境变量

在终端中执行命令“gedit/etc/bash.bashrc”,然后在文件末尾添加如下内容:

然后保存、关闭gedit软件。保存之后需要在终端命令行中执行source命令(source/etc/profile)使环境变量生效。

设置了环境变量后,在终端窗口中输入Qt Creator就可以启动Qt Creator这个开发软件了,而不用进入/opt/Qt5.12.2/Tools/Qt Creator/bin目录后执行命令./Qt Creator。

2.2.6 验证是否安装成功

在终端窗口中执行命令“qmake –version”,如果出现如下信息就表示安装成功:

    QMake version 3.1
    Using Qt version 5.12.2 in /opt/Qt5.12.2/5.12.2/gcc_64/lib

2.2.7 启动Qt Creator

在Linux下开发Qt程序,集成开发工具基本上就是Qt Creator。打开终端窗口,然后输入命令“Qt Creator”,稍等一会就会出现主窗口,如图2-111所示。

图2-111

2.2.8 第一个Linux下的Qt程序

相信大家到这会儿有点激动了,迫不及待地要新建项目文件。我们在前面已经介绍过新建项目的过程,这里不再赘述。不过,第一次运行项目不会那么顺利,我们先来看下面的例子。

【例2.10】 Linux下的第一个Qt程序

(1)在虚拟机Ubuntu的终端窗口中输入命令“Qt Creator”来启动Qt Creator。在Qt Creator主界面上,依次单击主菜单的菜单选项“文件→新建文件或项目”,随后显示出New File or Project对话框,在该对话框上选中Qt Widgets Application选项,如图2-112所示。

然后单击右下角的“Choose...”按钮,出现“项目介绍和位置”设置界面,输入名称test,保持默认路径,如图2-113所示。

如果要更改路径,则要确保所选择的目标目录已经存在。这一点是Qt Creator不如VC的地方。(Qt Creator居然不会自动新建目录!)

图2-112

图2-113

后面一直单击“下一步”按钮即可,直到最后单击“完成”按钮,如图2-114所示。

图2-114

这样一个MainWindow程序框架就建立起来了。

(2)按快捷键Ctrl+R运行项目,此时发现问题,报错,如图2-115所示。

图2-115

这个问题具有普遍性!对于很多Linux发行版本,Qt安装完成后如果直接编译或者运行项目,就会出现“cannot find-lGL”错误提示信息,这是因为 Qt找不到OpenGL的动态链接库(libGL.so)。OpenGL在大部分Linux发行版中都是默认安装的,包括Ubuntu、CentOS等Linux发行版,找不到时一般都是路径不对。

Qt默认在/usr/lib/目录下查找动态链接库,但是很多Linux发行版将OpenGL链接库存放在其他目录。例如,笔者使用的是CentOS 7,它的OpenGL链接库位于/usr/lib64/目录;而对于Ubuntu,它的OpenGL链接库位于/usr/lib/i386-linux-gnu/mesa/目录。只要把libGL.so复制到/usr/lib/目录,或者在/usr/lib/目录下为libGL.so创建一个链接,就能解决问题。显然第二种办法更好。

另外,Linux发行版自带的OpenGL链接库在后缀中添加了版本号,例如libGL.so.1、libGL.so.1.2.0、libGL.so.1.3.1等,但是Qt在链接阶段查找的OpenGL链接库是不带版本号的。

总而言之,我们需要在/usr/lib/目录下为OpenGL链接库创建一个链接,并去掉版本号。

如果不知道当前Linux系统中libGL.so的具体路径,那么可以使用locate libGL.so命令或find/usr-name libGL.so命令查找,然后使用ln-s创建链接。首先查找libGL.so:

把最后一个链接到/usr/lib/libGL.so:

    ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/libGL.so

此后,按快捷键Ctrl+R运行,就可以发现运行成功了(如果还不行,就尝试重新启动Qt,并再次打开刚才的项目文件)。运行结果如图2-116所示。

图2-116

如果在一线企业从事开发工作,肯定要和其他同事进行合作,而且需要调用其他人提供的共享库,有关Linux下的Qt如何调用.a静态库和.so共享库的知识,可以参考本书的第9章。如果读者作为初学者而不知道什么是库,建议先学习Linux下的C语言编程知识(可以参考清华大学出版社出版的《Linux C与C++一线开发实践》,里面详细介绍了共享库的概念、创建和使用)。

2.2.9 做个快照

前面我们把Linux下的Qt环境搭建起来了,为了保持劳动成果,可以用VMware软件做个快照,一旦系统出现故障,就可以恢复到做快照时的状态,建议养成这样一个良好的习惯。