從零開始學習QT Creator(作者:developCpp)

來源:互聯網
上載者:User

1.從Hello World開始
見很多新人問如何使用QT Creator
感覺還是抽點時間出來,寫一個QT Creator使用協助吧

首先下載,地址如下
http://get.qt.nokia.com/qtsdk/qt-sdk-win-opensource-2009.05.exe

安裝很簡單,直接預設,點下一步即可

安裝好之後,開啟QT Creator
建立工程 File => New File or Project..
選擇Projects => Empty QT4 Project
輸入工程名, Name, 例如 Hello
儲存位置Creat in, 例如 D:/QT/Sample/

按下Next, 這裡剛開始學習,只要預設即可,一路Next下去,最後Finish

這時, QT Creator自動建立一個Hello.pro檔案

開啟此Hello.pro檔案
寫入
TARGET = hello
TEMPLATE = app
SOURCES += main.cpp

然後右鍵Hello工程名, 選擇菜單 Add New
選擇 C++ => C++ Source File, 按下OK
輸入源檔案名稱Name: main.cpp

開啟main.cpp, 寫一個簡單的Hello world程式吧

#include <QApplication>
#include <QLabel>

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    QLabel *label=new QLabel("Hello world!");
    label->show();
    return app.exec();
}

按下菜單 Build => Run編譯運行
---------------------------------------------------華麗的分割線----------------------------------------------------------

2.debug和release
讓我們開啟檔案夾D:/QT/Sample/ 看看吧
除了工程檔案hello.pro和源檔案main.cpp, 又多了好多檔案和檔案夾
這些都是臨時檔案和編譯檔案, 試一下,刪除這些檔案和活頁夾
只留下兩個hello.pro和main.cpp
開啟QT Creator, 選擇菜單 File => Open File or Project
選擇hello.pro檔案, 開啟

然後編譯運行, 又出現了一大堆檔案
其中還有兩檔案夾debug和release
開啟檔案夾debug, 你會發現hello.exe和main.o
而release檔案夾中是空的
選擇菜單 Build => Set Build Configuration 子功能表有debug和release
這是兩種編譯模式, 點選release再編譯, 就會在release檔案夾中產生編譯後的檔案
你會發現release比debug檔案更小,
因為debug中包含了除錯調試代碼,而release沒有
當你的程式正式發布的時候,需要選擇release

---------------------------------------------------華麗的分割線----------------------------------------------------------
3.最簡單的Dialog程式

以前學VC的時候就是從對話方塊程式開始的,
現在QTCreator一切照舊, 繼續

建立一個空工程
File => New File or Project.=> Projects => Empty QT4 Project
Name為mydlg
Create in為D:/QT/sample/

右鍵工程名mydlg,選擇菜單Add New
選擇C++ => C++ Source File, 命名為main.cpp

這裡因為要建立一個對話方塊
所以需要建一個對話方塊類以及資源檔ui, 就像VC中的rc

再添加一個C++源檔案和一個標頭檔,操作如下
Add New => C++ => C++ Source File, 命名為Dialog.cpp
Add New => C++ => C++ Header File, 命名為Dialog.h

再添加一個資源檔ui
Add New => QT => Qt Designer Form, 這裡選擇一個樣色
習慣VC6的朋友可以選擇templates/form => Dialog with Buttons Right
在下放選擇Embedded Design,我們選擇預設選項
這裡新手有空可以每種樣色都玩一玩
然後Next, 命名為Dialog.ui儲存

OK,檔案建好了,開始寫入代碼吧
開啟mydlg.pro,寫入以下代碼

TARGET = mydlg
TEMPLATE = app
SOURCES += main.cpp /
    dialog.cpp
HEADERS += dialog.h
FORMS += dialog.ui

這裡如果一種類型有多個檔案,可以用斜杠換行隔開
開啟各Dialog.h輸入代碼如下

#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui
{
    class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
protected:
    void changeEvent(QEvent *e);
private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

開啟Dialog輸入代碼如下

#include "dialog.h"
#include "ui_dialog.h"

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

Dialog::~Dialog()
{
    delete ui;
}

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

開啟main.cpp輸入代碼如下

#include <QtGui/QApplication>
#include "dialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}

此時 Build => Run 會看到一個簡單的視窗
如何在其上面做動作呢? OK,我們再來

開啟 Dialog.ui
拖一個PushButton,放於視窗上,右鍵它,選擇菜單 Go to slot
這時會彈出一個對話方塊,選擇Clicked(),按下OK

這時會自動寫入一個成員函數到Dialog類
如下
void Dialog::on_pushButton_clicked()
{
   
}
在其中寫入代碼,如下
void Dialog::on_pushButton_clicked()
{
    QMessageBox::information( this, "mydlg",
        "hello world" );
}
在最上放加個標頭檔 #include <QMessageBox>

Build => Run 運行一下看看
點那個按鈕會彈出一個訊息框哦

---------------------------------------------------華麗的分割線----------------------------------------------------------

4.UI檔案
可能有的新人會對ui檔案有點迷惑,特別是只學過命令列模式編程的學生
ui檔案是個什麼格式呢? 它是如何被編譯器識別和編譯的呢?
我們開啟QTCreator,建立一個Dialog工程
File => New File or Project => Projects => Qt4 Gui Application
按下OK,命名Name為text,儲存在D:/QT/sample/
按兩次Next, 選擇Base Class為QDialog,按下一步,完成

這時會自動產生一個Dialog類型的工程
右鍵工程下的Forms => Dialog.ui, 選擇菜單Open With => Plain TextEditor
你會發現ui檔案格式為XML,
如下
<ui version="4.0">
<class>Dialog </class>
<widget class="QDialog" name="Dialog" >
  <property name="geometry" >
  <rect>
    <x>0 </x>
    <y>0 </y>
    <width>600 </width>
    <height>400 </height>
  </rect>
  </property>
  <property name="windowTitle" >
  <string>Dialog </string>
  </property>
</widget>
<layoutDefault spacing="6" margin="11" />
<pixmapfunction> </pixmapfunction>
<resources/>
<connections/>
</ui>
但C++編譯器又是如何編譯XML格式的ui檔案呢
開啟D:/QT/sample/test/
這裡有5個檔案,有工程檔案,源檔案,標頭檔以及ui檔案
分別是test.pro,main.cpp,dialog.cpp,dialog.h,dialog.ui
現在回到QTCreator編譯這個工程
再看D:/QT/sample/test/
你看到,除了之前產生的那些臨時的檔案夾和檔案
還多了一個ui_dialog.h
開啟ui_dialog.h
這是一個從ui檔案產生的一個標頭檔
也就是將XML格式的ui檔案轉換成編譯器可以處理的原始碼檔案,
然後再編譯

返回ui,在其視窗上加上一個PushButton,
在其下方的Signals Slots Editor中,點"+"號按鈕,增加一個訊號槽
Sender選擇PushButton
Signal選擇clicked
Receiver選擇Dialog
Slot選擇close
意思是按下這個按鈕,就關閉對話方塊

儲存關閉dialog.ui,改用Plain TextEditor開啟它
你會發現多了一個串連
如以下代碼
<connections>
  <connection>
  <sender>pushButton </sender>
  <signal>clicked() </signal>
  <receiver>Dialog </receiver>
  <slot>close() </slot>
  <hints>
    <hint type="sourcelabel">
    <x>107 </x>
    <y>141 </y>
    </hint>
    <hint type="destinationlabel">
    <x>299 </x>
    <y>199 </y>
    </hint>
  </hints>
  </connection>
</connections>
其中不難理解sender,signal,receiver,slot

返回ui再加上一個PushButton,右鍵它,選擇菜單Go to Slot, 然後選clicked
如此Dialog類增加了一個自訂的成員函數
void Dialog::on_pushButton_2_clicked()
{
   
}

但是用Plain TextEditor開啟dialog.ui後會發現沒有上一個PushButton的串連connections
開啟ui_dialog.h也沒有發現與此相關的串連

---------------------------------------------------華麗的分割線----------------------------------------------------------
5.To jpchen609 & wxdcxp
這裡只是介紹一下怎麼添加源檔案而已

也許我真不應該發這個文章
這個IDE的使用真沒啥可寫的,點點看看就會了
至於QT庫的使用,可以看 <C++ GUI Programming with Qt 4>

我再介紹一下動態編譯和靜態編譯的問題吧,就當是散分了

QT Creator預設是動態編譯,發布時需要打包多個dll進來,
在windows下很多人希望只有一個exe即可運行於任何電腦上

改用靜態編譯很簡單,在開始菜單開啟Qt Command Prompt
輸入configure -release -static -fast 按斷行符號,然後選擇是商業版還是社區版本
然後就輸入mingw32-make開始編譯了,時間很長,
如果在C盤需要注意硬碟大小,編譯之後的C:/Qt/2009.05有兩個多G
完成之後用mingw32-make clean刪除編譯產生的臨時檔案,這樣C:/Qt/2009.05這個檔案夾會縮小到1.5G左右
開啟QT Creator之後在Build => Set Build Configuration設定為release,
編譯之後的exe將完全包含了QT類庫,大小是8M多點
此時拷貝到其他電腦還需要mingwm10.dll,如果想只要一個exe即可運行,則需要設定編譯去除mthreads選項
因為只有用到thread的時候才會需要mingwm10.dll
其實也不需要如此,因為mingwm10.dll也只有11KB大小而已

好了不多說了,浪費了大家的時間我感到很抱歉!
---------------------------------------------------華麗的分割線----------------------------------------------------------
 
6.實在抱歉,最近瑣事纏身,現在才...

先說多表單吧, 大致說下, 這裡我就不細講了,因為很簡單.

開啟QT Creator, 建立一個Gui Application,全部預設下一步,該怎樣怎樣,然後完成

建好工程,右鍵工程名(這裡是最上面的黑體的工程名,不是.pro檔案) => Add New => QT Designer Form

然後 Next , Next , Finish 就建立了一個名叫Dialog的對話方塊

開啟Dialog.ui, 在上面放一個Text Edit和一個PushButton
同樣開啟mainwindow.ui,放一個Text Edit 和 PushButton

開啟Dialog.h, 給Dialog Class加上兩個成員函數如下
class Dialog : public QDialog {
........
public:
    void SetText(QString m_Text);
    QString GetText();
.......
};
開啟Dialog.cpp, 最下面寫入如下代碼
void Dialog::SetText(QString m_Text)
{
    ui->textEdit->setText(m_Text);
}
QString Dialog::GetText()
{
    return ui->textEdit->toPlainText();
}
開啟mainwindow.ui,右鍵那個PushButton => Go to Slot => 選擇clicked => OK
就會進入mainwindow.cpp,並且自動產生一個成員函數如下
void MainWindow::on_pushButton_clicked()
{
}
在mainwindow.cpp最上面加如下代碼
#include "dialog.h"

在成員函數中加入如下代碼
void MainWindow::on_pushButton_clicked()
{
    Dialog dlg(this);
    dlg.SetText("Hello World");
    if(dlg.exec()==QDialog::Accepted)
    {
        ui->textEdit->setText(dlg.GetText());
    }
}
編譯運行, 就可以在兩個表單之間相互傳遞值了

補充:
如果只是在兩個視窗之間,傳遞單個控制項的值,則只需要將其指向控制項的指標設定為public即可,如下
class Dialog : public QDialog {
.......
public:
    QTextEdit *m_edit;
.........
};
然後在建構函式中將其指向ui->控制項地址,如下
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    m_edit=ui->textEdit;
}
然後在兩個視窗間傳遞此控制項就會簡單了, 如下
void MainWindow::on_pushButton_clicked()
{
    Dialog dlg(this);
    //dlg.SetText("Hello World");
    dlg.m_edit->setText(ui->textEdit->toPlainText());
    if(dlg.exec()==QDialog::Accepted)
    {
        //ui->textEdit->setText(dlg.GetText());
        ui->textEdit->setText(dlg.m_edit->toPlainText());
    }
}

如果是在兩個視窗間傳遞多組值,以及夾帶一些演算法,則用第一種為子視窗增加成員函數的方法會很簡單
 
---------------------------------------------------華麗的分割線----------------------------------------------------------
7.下面介紹資料庫

以前在windows下最簡單最常用的是Access資料庫
但是現在不同了,sqlite比Access還要簡單,只有一個檔案到處可運行,也不需要Office支援^_^

有的新手對這快可能有點疑惑, 所以分開講,一步一步來

開啟QT Creator,建立一個空工程,Empty Qt4 Project
Name為sql_sample
Creator in為D:/QT/sample/
然後Next Finish

右鍵工程名sql_sample => Add New => C++ Source File 取名main.cpp

開啟main.cpp輸入如下代碼
#include <QApplication>
#include <QtSql>
#include <QTableView>
#include <QMessageBox>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

//先看看資料庫檔案是否存在
    bool IsExist=QFile::exists("mydb.dat");
//串連資料庫,如果不存在則建立一個
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("mydb.dat");
    if(!db.open())
    {
//如果無法開啟則報錯
        QMessageBox::warning(0,"title","開啟資料庫失敗");
        return 1;
    }
//如果是建立的資料庫,先初始化,建個表,輸入一點點內容
    if(IsExist==false)
    {
        QSqlQuery query;
        query.exec("create table t_user(f_id,f_name,f_phone);");
        query.exec("insert into t_user(f_id,f_name,f_phone)values(1,'kenneth','87654321');");
        query.exec("insert into t_user(f_id,f_name,f_phone)values(2,'cindy','123456');");
        query.exec("insert into t_user(f_id,f_name,f_phone)values(3,'mike','888777');");
    }
//一般資料庫表中的內容用QTableView顯示比較好,就像VC中的CListView
    QSqlQueryModel *model = new QSqlQueryModel;
    model->setQuery("select * from t_user");
    model->setHeaderData(0, Qt::Horizontal, "ID");
    model->setHeaderData(1, Qt::Horizontal, "Name");
    model->setHeaderData(2, Qt::Horizontal, "Phone");

    QTableView *view = new QTableView;
    view->setWindowTitle("QSqlQueryModel");
    view->setModel(model);
    view->show();

    db.close();

    return app.exec();
}

開啟sql_sample.pro,輸入如下
QT      += sql
TARGET = sql_sample
TEMPLATE = app
SOURCES += main.cpp

注意第一行 "QT += sql",這是加入對資料庫模組的支援,必須要有噢

編譯運行,看看效果

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/sunruiy/archive/2009/12/25/5071648.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.