【Qt入門實踐】Linux下Qt開發環境的搭建


一  準備工作

虛擬機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 <QApplication>


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 <QtGui/QApplication>
#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即可



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章