首页 > 程序开发 > 综合编程 > 其他综合 >

Qt入门实践:Linux下Qt开发环境的搭建

2016-11-04

一、准备工作:虚拟机VMWare已安装,Linux开发版本为 RedHat9,Qt安装包已下载,为:qt-x11-opensource-src-4 5 3 tar gz。

一 准备工作

虚拟机VMWare已安装
Linux开发版本为 RedHat9
Qt安装包已下载,为:qt-x11-opensource-src-4.5.3.tar.gz
QtCreator安装包已下载,为:qt-creator-1.2.1-src.zip (需要qt 4.5.0支持 即可)

二 安装Qt4.5.3

1、利用VMWare的共享文件夹,将2个安装包拷贝到/root/qt目录下
2、进入到/root/qt目录:
tar -zxvf qt-x11-opensource-src-4.5.3.tar.gz ----即解压安装包
cd qt-x11-opensource-src-4.5.3 ----进入目录
./configure ----生成Makefile文件
注意:根据提示,选择开源版本,并接受协议要求;最后会提示qt安装在/usr/local/Trolltech/Qt-4.5.3目录下
gmake ----编译
注意:编译会出现错误而停止:提示找不到krb5.h,这是因为RedHat9是将认证服务kerberos的include file放在了/usr/kerberos/include里,而不是/usr/include下。
执行下面的命令可以解决
ln -s /usr/kerberos/include/com_err.h /usr/include
ln -s /usr/kerberos/include/profile.h /usr/include

ln -s /usr/kerberos/include/krb5.h /usr/include

重新运行gmake ----编译成功。但耗时约1小时

gmake install ----安装Qt.大约需要20分钟
Qt安装完成
3、修改/etc/profile:
在PATH的最前面,加上/usr/local/Trolltech/Qt-4.5.3/bin。这是为了将Qt的可执行命令,加入到搜索路径中。

4、重启Linux后,在shell下执行命令designer,应该可以打开Qt4.5.3版本的设计器。

三 安装QtCreator1.2.1

1、进入到/root/qt目录:
unzip qt-creator-1.2.1-src.zip ----解压安装包
cd qt-creator-1.2.1-src ----进入目录
qmake qtcreator.pro ----编译 qtcreator.pro工程文件
make ----需要约1小时
2、安装完成,运行QtCreator
方法:在qt-creator-1.2.1-src/bin/目录下
./qtcreator ----QtCreator1.2.1程序应会被打开

四 QtCreator与Qt库的关联设置

1、打开QtCreator1.2.1
2、在菜单中依次选 Tools----Option----Qt4
QtCreator与Qt应已经自动关联了;如没有自动关联,需要手动关联,即需要制定Qt4.5.3的路径/usr/local/Trolltech/Qt-4.5.3
调试助手Debugging Help应还没有配置,点击 Rebuild后,调试助手Debugging Help构建完成
至此,Qt开发环境搭建完毕

五 自动生成GUI框架的编程步骤:

1、打开QtCreator
2、新建工程项目
依次选取 Qt4 GUI应用----修改工程项目路径----修改工程名----修改Base class基类(可以为QMainWindow、QWidget、QDialog )----修改Class name类名
3、在界面中,即设计器上,可以添加任意部件,如1个Label
4、检查项目和代码,发现代码都已自动生成
自动生成了main.cpp、派生于某个基类的类文件(包括h和cpp文件各1个)、1个ui文件

5、main.cpp代码基本如下:

#include "hello01dialog.h"
#include 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Hello01Dialog w;
    w.show();
    return a.exec();
}	

六 解决中文乱码问题:

在main函数里第2行开始,增加下列语句:

    QTextCodec *codec=QTextCodec::codecForLocale();
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForLocale(codec);

七 案例

案例:登录窗口
开发步骤:
1、建立Qt4 GUI应用程序
2、将主界面的 标题WindowTitle改为 ---管理系统主界面
3、点击项目右键----新建----选 Qt设计器Form Class----类名该为 LoginDialog ----建立1个 登录窗口类LoginDialog
4、利用图形界面,修改登录窗口的标题WindowTitle改为----登录窗口
5、在登录窗口上增加下列 组件(控件)
QLabel 用户名 QLineEdit (可以输入用户名)
QLabel 密码 QLineEdit (可以输入密码)

QButton 登录 QButton 取消

6、点击 登录----右键----选择 Go to Slot 可以自动产生1个成员函数,该函数可以判定 用户名/密码是否正确;如果正确,将进入主界面,否则会有错误提示,需要重新输入
7、点击 取消----右键----选择 Go to Slot 可以自动产生1个成员函数,该函数将导致 程序退出,即不再登录了。
代码:
//main.cpp
#include 
#include "test01widget.h"
#include "logindialog.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec *code=QTextCodec::codecForLocale();
    QTextCodec::setCodecForCStrings(code);
    QTextCodec::setCodecForLocale(code);
    QTextCodec::setCodecForTr(code);
    Test01Widget w;
    LoginDialog logDialog01;
    int flag=logDialog01.exec();	//返回值 如果是QDialog::Accepted,则说明是 登录窗口是正常关闭的;否则,是非正常关闭,意味着整个程序都应该退出
    if(flag==QDialog::Accepted)		
    {
           w.show();	//登录窗口正常关闭后,执行该语句后,主界面窗口才会显示出来
    }
    else
    {
        //exit(1);
        return 1;		//登录窗口是非正常关闭的,因此执行该语句后,整个程序将退出
    }
    return a.exec();
}
//logindialog.cpp文件
#include "logindialog.h"
#include "ui_logindialog.h"


LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    m_ui(new Ui::LoginDialog)
{
    m_ui->setupUi(this);
}

LoginDialog::~LoginDialog()
{
    delete m_ui;
}

void LoginDialog::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        m_ui->retranslateUi(this);
        break;
    default:
        break;
    }
}


void LoginDialog::on_pushButton_clicked()		//点击 登录按钮后,将执行 该函数
{
    QString userName=m_ui->lineEdit->text();		//获取 用户名---注意字符串的类型是 QString
    QString password=m_ui->lineEdit_2->text();
    if(userName=="zhangsan" && password=="123456")
    {
        accept();		//该函数 会导致 当前的登录窗口关闭,而且是正常关闭。它将影响main.cpp中 loginDialog.exec()函数的返回值
    }
    else
    {
        QMessageBox::warning(this,"告警提示","用户名和密码不符!");		//利用QMessageBox类的静态成员函数 warning,产生 告警窗口
        //reject();		//不应该使用 该函数。它会导致 当前的登录窗口关闭,而且是非正常关闭。它将影响main.cpp中 loginDialog.exec()函数的返回值
    }
    return;
}

void LoginDialog::on_pushButton_2_clicked()
{
    reject();		//它会导致 当前的登录窗口关闭,而且是非正常关闭。它将影响main.cpp中 loginDialog.exec()函数的返回值
    //close();		//该函数可不用,因为reject函数已包含了该功能。
}
//窗口间的消息传递----利用parentWidget()函数

//案例:登录成功后,进入主界面,发现主界面的 WindowTitle标题,变成了 登录的用户名
//步骤:
//1、修改main.cpp
// LoginDialog logDialog01;    修改为 	LoginDialog logDialog01(&w);    //即将 父窗口的地址,赋值给 登录窗口,因为登录窗口,后面要用到
 
//2、 修改 单击 登录按钮 触发的函数 
void LoginDialog::on_pushButton_clicked()		//点击 登录按钮后,将执行 该函数
{
    QString userName=m_ui->lineEdit->text();		//获取 用户名---注意字符串的类型是 QString
    QString password=m_ui->lineEdit_2->text();
    if(userName=="zhangsan" && password=="123456")
    {
        ((Test01Widget *)parentWidget())->setWindowTitle(userName);		//parentWidget()函数可以得到父窗口的地址,但必须进行强制类型转换;然后调用父窗口的成员函数,重新设置了标题。
        accept();		//该函数 会导致 当前的登录窗口关闭,而且是正常关闭。它将影响main.cpp中 loginDialog.exec()函数的返回值
    }
    else
    {
        QMessageBox::warning(this,"告警提示","用户名和密码不符!");		//利用QMessageBox类的静态成员函数 warning,产生 告警窗口
        //reject();		//不应该使用 该函数。它会导致 当前的登录窗口关闭,而且是非正常关闭。它将影响main.cpp中 loginDialog.exec()函数的返回值
    }
    return;
}
//注意:
//	因为使用了 Test01Widget类,所以,该cpp文件前,要加 Test01Widget类的头文件
	

//       让密码 不可见
//	方法:在属性栏,修改密码LineEdit控件的EchoMode为 Password即可
相关文章
最新文章
热点推荐