一、面向對象的編程
《案例》通過一個按鈕更新時間顯示,顯示格式為xx:xx:xx
//主函數文件 #include<QApplication> #include"TimeDialog.h" int main(int argc,char** argv){ QApplication app(argc,argv); TimeDialog time; time.show(); return app.exec(); }
//類聲明文件 #ifndef __TIMEDIALOG__ #define __TIMEDIALOG__ #include<QDialog> #include<QTime> #include<QPushButton> #include<QLabel> #include<QVBoxLayout>//垂直布局器 class TimeDialog:public QDialog{ Q_OBJECT public: TimeDialog(void); private slots: void timeClicked(void);//因為label組件設置文本槽函數需要一個參數,但是buttonClicked信號是無參的。無法匹配,所以自定義槽函數進行連接 private: QPushButton* m_btnTime; QLabel* m_labTime; }; #endif
//類實現文件 #include "TimeDialog.h" TimeDialog::TimeDialog(){ setWindowTitle("時間"); //獲取按鈕對象 m_btnTime=new QPushButton("獲取時間",this); //獲取標簽對象 m_labTime=new QLabel("00:00:00",this); m_labTime->setFrameStyle(QFrame::Panel||QFrame::Sunken);//設置邊框風格 m_labTime->setAlignment(Qt::AlignHCenter|| Qt::AlignVCenter);//設置對齊方式 //創建垂直布局器 QVBoxLayout* layout=new QVBoxLayout(this); layout->addWidget(m_labTime); layout->addWidget(m_btnTime); //顯示布局器 setLayout(layout); //連接 connect(m_btnTime,SIGNAL(clicked()),this,SLOT(timeClicked())); } void TimeDialog::timeClicked(void){ //currentTime返回QTime類對象,他是一個靜態靜 //態成員函數 //toString講時間轉換為字符串 m_labTime->setText( QTime::currentTime(). toString("hh:mm:ss")); }
也可以自定義信號函數完成與標簽的連接(注意自定義函數只能聲明,不能定義)
二、QT設計師
1、《案例》使用designer重構加法計算器
(1)創建工程目錄,並進入
(2)在終端輸入designer進入設計師界面
選擇一個父窗口的模板,Dialog without buttons->單擊Create
Widget box(窗口部件盒)包含了常用的組件,從上到下分別為
第一組(Layouts) | 布局器 |
第二組(Spacers) | 伸展器 |
第三組(Buttons) | 按鈕 |
第四組(Item views) | 列表 |
第五組(Item widgets) | 列表 |
第六組(Container) | 容器 |
第七組(Input Widgets) | 輸入組件 |
第八組(Display Widgets) | 顯示組件 |
右側比較重要
(3)設計UI
1)拖拽一個Button組件,到對話框上,day2中計算器中“=”號的屬性設置按鈕。
使能禁用->修改objectname為m_btnCalc->Text文本改為“=”->修改字體大小,點大小18,加粗
2)拖拽一個LineEdit組件,修改對象名為m_editX,修改字體大小,粗細。選擇右對齊。同類有又右操作數的LineEdit對象。
3)結果的LineEdit對象要設置為只讀。
4)加入Label的+號
(4)單機空白處,在快捷菜單中點擊水平布局按鈕,或者右鍵選擇布局方式
(5)修改主對話框標題為“計算器”,修改對象名稱
(6)保存UI
(7)將UI文件轉換成C++支持的.h文件,使用uic命令進行轉換,如:uic CalculatorDialog.ui -o ui_CalculatorDialog.h//Makefile可完成此功能,可打開查看其內容
這個自定義的類有兩種用法:
1)由其他類繼承
把上述頭文件中UI命名空間下的計算器類由昨天的計算器類來繼承,刪除原來的UI初始化,保留槽函數,連接函數等,可完成此前計算器相同的功能
2)作為類成員
自行完成

(1)按上圖設置其必要屬性,這里強調UI設計時兩點:1)調節LineEdit的echoMode,使輸入數據不可見。2)調節最小尺寸和最大尺寸的寬度和高度(與當前尺寸下相同),使其不可拉伸
(2)uic將ui文件轉換為頭文件
(3)編寫代碼
編寫頭文件繼承LoginDialog或ui_LoginDialog類,可以與前者同名,因為在轉換的頭文件存在一個名為UI的命名空間。可以查看其關系。
編寫類實現文件,需要在子類中調用setupUI函數,初始化UI ,同時在文件中將按鈕中的文字改為中文確定和取消(使用button()函數獲取buttonBox中的兩個按鈕指針,它的參數是一個枚舉值,例如:QButtonBox::Ok,再使用setText設置其文本)
實現主文件。
(4)構建工程,調試代碼
//類聲明文件 #ifndef __LOGINDIALOG__ #define __LOGINDIALOG__ #include<QDialog> #include<QMessageBox> #include "ui_LoginDialog.h" class LoginDialog:public QDialog,public Ui::LoginDialog{ Q_OBJECT public: LoginDialog(); private slots: void onAccepted();//單擊組合按鈕確定,發送的是accepted信號 void onRejected();//單擊組合按鈕取消,發送的是rejected信號 }; #endif
//類實現文件 #include "LoginDialog.h" #include<QPushButton> LoginDialog::LoginDialog() { //初始化界面 setupUi(this); m_btnBox->button(QDialogButtonBox::Ok)->setText("確定"); m_btnBox->button(QDialogButtonBox::Cancel)->setText("取消"); connect(m_btnBox,SIGNAL(accepted()),this,SLOT(onAccepted())); connect(m_btnBox,SIGNAL(rejected()),this,SLOT(onRejected())); } void LoginDialog::onAccepted(){ //如果輸入正確用戶名和密碼,則登錄成功,關閉父窗口 //輸入錯誤,彈出提示框 if(m_editUsername->text()=="tarena"&&m_editPasswd->text()=="123456"){ qDebug("登陸成功"); close(); } else{ QMessageBox msgBox(QMessageBox::Critical,//提示框風格 windowTitle(),//標題 "用戶名或密碼錯誤",//提示消息 QMessageBox::Ok,//選擇按鈕 this);//父窗口指針 msgBox.setButtonText(QMessageBox::Ok,"確定"); msgBox.exec(); } } void LoginDialog::onRejected(){ //創建消息提示狂 QMessageBox msgBox(QMessageBox::Question,//提示框風格 windowTitle(),//標題 "確定取消登錄嗎?",//提示消息 QMessageBox::No|QMessageBox::Yes,//選擇按鈕 this);//父窗口指針 msgBox.setButtonText(QMessageBox::Yes,"確定"); msgBox.setButtonText(QMessageBox::No,"取消"); //點擊yes退出父窗口 if(msgBox.exec()==QMessageBox::Yes){ close(); } }
//主文件 #include<QApplication> #include "LoginDialog.h" int main(int argc,char** argv){ QApplication app(argc,argv); LoginDialog login; login.show(); return app.exec(); }
三、創造器(qtcreator)
1、《案例》重構前述計算器
(1)終端啟動創造器
(2)新建工程,選擇Application->在選擇Qt widgets Application,創建
(3)輸入工程名稱,指定創建路徑,並且會在此路徑下創建一個與工程名相同的目錄
(4)設置開發套件,采用默認即可
(5)設置一個類名(這里設置為CalculatorDialog),並選擇一個父窗口(基類)
注意:
這一步驟完成后,會自動創建與輸入類名對用的頭文件,源文件和ui文件,項目文件及項目配置文件
(4)下一步,選擇項目管理工具,這里沒有,跳過。完成
注意:
在右側的影子構建勾選后,會將生成的中間文件存放到設置的文件夾下,如圖:
如果比較簡單的工程,可去掉該選項
(5)雙擊ui文件,進入設計。按前述計算機昨天的計算機設置組件屬性
注意:
ui設計時父窗口對象名不能修改
(6)全選組件 ,再水平布局
(7)右鍵=號,選擇轉到槽,可自動生成槽函數聲明和定義,手動添加按鍵使能槽函數(由EditLine內容來使能),並完成連接,只需完成定義內容即可