QT-面向對象的QT編程,QT設計師


一、面向對象的編程

《案例》通過一個按鈕更新時間顯示,顯示格式為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)作為類成員

   自行完成

 
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內容來使能),並完成連接,只需完成定義內容即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM