W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
首先說明一點(diǎn),在 C++ GUI Programming with Qt4, 2nd 中,這一章連同以后的若干章一起,完成了一個比較完整的程序——一個模仿 Excel 的電子表格。不過這個程序挺大的,而且書中也沒有給出完整的源代碼,只是分段分段的——我不喜歡這個樣子,我想要看到我寫出來的是什么東西,這是最主要的,而不是慢慢的過上幾章的內(nèi)容才能看到自己的作品。所以,我打算換一種方式,每章只給出簡單的知識,但是每章都能夠運(yùn)行出東西來。好了,扯完了,下面開始!
以前說的主要是一些基礎(chǔ)知識,現(xiàn)在我們來真正做一個東西——一個查找對話框。什么?什么叫查找對話框?唉唉,先看看我們的最終作品吧!
好了,首先新建一個工程,就叫 FindDialog 吧!嗯,當(dāng)然還是 Qt Gui Application,然后最后一步注意,Base Dialog 選擇 QDialog,而不是默認(rèn)的 QMainWindow,因?yàn)槲覀円獙W(xué)習(xí)建立對話框嘛!名字隨便起,不過我就叫 finddialog 啦!Ganarate form 還是不要的。然后 Finish 就好了。
打開 finddialog.h,開始編寫頭文件。
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <QtGui/QDialog>
class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;
class FindDialog : public QDialog
{
Q_OBJECT
public:
FindDialog(QWidget *parent = 0);
~FindDialog();
signals:
void findNext(const QString &str, Qt::CaseSensitivity cs);
void findPrevious(const QString &str, Qt::CaseSensitivity cs);
private slots:
void findClicked();
void enableFindButton(const QString &text);
private:
QLabel *label;
QLineEdit *lineEdit;
QCheckBox *caseCheckBox;
QCheckBox *backwardCheckBox;
QPushButton *findButton;
QPushButton *closeButton;
};
#endif // FINDDIALOG_H
大家都是懂得 C++ 的啊,所以什么 #ifndef,#define 和 #endif 的含義和用途就不再贅述了。
首先,聲明四個用到的類。這里做的是前向聲明,否則的話是編譯不過的,因?yàn)榫幾g器不知道這些類是否存在。簡單來說,所謂前向聲明就是告訴編譯器,我要用這幾個類,而且這幾個類存在,你就不要擔(dān)心它們存不存在的問題啦!
然后是我們的 FindDialog,繼承自 QDialog。
下面是一個重要的東西:Q_OBJECT。這是一個宏。凡是定義信號槽的類都必須聲明這個宏。至于為什么,我們以后再說。
然后是 public 的構(gòu)造函數(shù)和析構(gòu)函數(shù)聲明。
然后是一個 signal:,這是 Qt 的關(guān)鍵字——還記得前面說過的嘛?Qt 擴(kuò)展了 C++ 語言,因此它有自己的關(guān)鍵字——這是對信號的定義,也就是說,F(xiàn)indDialog 有兩個 public 的信號,它可以在特定的時刻發(fā)出這兩個信號,就這里來說,如果用戶點(diǎn)擊了 Find 按鈕,并且選中了 Search backward,就會發(fā)出 findPrevious(),否則發(fā)出 findNext()。
緊接著是 private slots:的定義,和前面的 signal 一樣,這是私有的槽的定義。也就是說,F(xiàn)indDialog 具有兩個槽,可以接收某些信號,不過這兩個槽都是私有的。
為了 slots 的定義,我們需要訪問 FindDialog 的組件,因此,我們把其中的組件定義為成員變量以便訪問。正是因?yàn)樾枰x這些組件,才需要對它們的類型進(jìn)行前向聲明。因?yàn)槲覀儍H僅使用的是指針,并不涉及到這些類的函數(shù),因此并不需要 include 它們的頭文件——當(dāng)然,你想直接引入頭文件也可以,不過那樣的話編譯速度就會慢一些。
好了,頭文件先說這些,下一篇再說源代碼啦!休息,休息一下!
本文出自 “豆子空間” 博客,請務(wù)必保留此出處 http://devbean.blog.51cto.com/448512/194031
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: