我的QT5學習之路(三)——模板庫、工具類和控件(下)


一、前言

  作為第三篇的最后一部分,我們來看一下Qt的控件,談到控件,就會讓人想到界面的美觀性和易操作性,進而想到開發的便捷性。作為windows界面開發的MFC曾經是盛行了多少年,但是其弊端也隨着其他界面庫的面世而不斷的被放大,對於一個剛學會C或者C++轉而學習windows界面開發的新手來說,MFC的控件和界面設計抽象而且復雜,也許現在你還記得MFC控件重繪比其他界面庫多花費的時間,走過的彎路,調過的bug。因此,我們現在來看看Qt會不會帶給我們不一樣的體驗,Let‘s go。

二、控件介紹

2.1 按鈕組(Buttons)

  對於按鈕的展示和操作,我們直接通過圖片和代碼的方式來展示。

Push Button:按鈕

Tool Button:工具按鈕

Radio Button:單選按鈕

Check Box:復選框

Command Link Button:命令連接按鈕

Dialog Button Box:窗口按鈕盒

2.1.1 按鈕實例

 1 #include "mywidegt.h"
 2 #include <QApplication>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     QApplication a(argc, argv);
 7     MyWidegt w;
 8     /*設置主窗體的位置和初始大小*/
 9     w.setGeometry(100,100,200,100);
10     w.show();
11     return a.exec();
12 }
main.cpp
 1 #ifndef MYWIDEGT_H
 2 #define MYWIDEGT_H
 3 
 4 #include <QWidget>
 5 
 6 class MyWidegt : public QWidget
 7 {
 8     Q_OBJECT
 9 
10 public:
11     MyWidegt(QWidget *parent = 0);
12     ~MyWidegt();
13 };
14 
15 #endif // MYWIDEGT_H
mywidegt.h
 1 #include "mywidegt.h"
 2 #include <qapplication.h>
 3 #include <qpushbutton.h>
 4 #include <qfont.h>
 5 
 6 MyWidegt::MyWidegt(QWidget *parent)
 7     : QWidget(parent)
 8 {
 9     /*設置對話框的最小顯示尺寸*/
10     setMinimumSize(200,120);
11     /*設置對話框的最大顯示尺寸*/
12     setMaximumSize(1366,768);
13     /*PushButton的構造函數
14     QPushButton::QPushButton(const QString & text, QWidget * parent = 0)
15     */
16     QPushButton *quit=new QPushButton("Quit",this);
17     /*setGeometry(int x, int y, int w, int h)從坐標(x,y)開始顯示一個w*h大小的界面,范圍不能超過上面設置的尺寸*/
18     quit->setGeometry(62,40,75,30);
19     /*設置字體    void    setFont(const QFont &)*/
20     quit->setFont(QFont("Times",18,QFont::Bold));
21 
22     connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));
23 
24 }
25 
26 MyWidegt::~MyWidegt()
27 {
28 
29 }
mywidegt.cpp

2.2 輸入控件組(Input Widegets)

輸入控件組(Input Widegets)包含的各個控件的名稱依次如圖所示

              Combo Box: 組合框

     Font Combo Box: 字體組合框

     Line Edit: 行編輯

     Text Edit: 文本編輯

     Plain Text Edit:文本編輯

     Spin Box: 數字顯示框(自旋盒)

     Double Spin Box: 雙自旋盒

     Time  Edit: 時間編輯

     Date Edit: 日期編輯

     Date/Time Edit: 日期/時間編輯

     Dial:撥號

     Horizontal Scroll Bar: 橫向滾動條

     Vertical Scroll Bar:垂直滾動條

                  Horizontal Slider: 橫向滑塊

                  Vertical Slider:垂直滑塊

                  Key Sequence Edit:快捷鍵編輯 

2.2.1 控件類介紹

1、QDateTime類

  在Qt5中,可以使用QDateTime類類獲取系統的時間。通過QdateTime::currentDateTime()來獲取本地系統的時間和日期吸納好。可以通過date()和time()來返回datetime中的日期和時間部分,代碼如下。

1 Qlabel *datalabel = new Qlabel();
2 QdateTime *datatime=new QdateTime(QdateTime::currentDateTime());
3 datalabel->setText(datatime->date().toString());
4 datalabel->show();

2、Qtimer類

  定時器(Qtimer)的使用很簡單,只需要以下幾個步驟就可以完成定時器的應用。

  (1)新建一個定時器

QTimer *time_clock=new Qtimer(parent);

  (2)連接這個定時器的信號和槽,利用定時器的timeout()。

connect(time_clock,SIGNAL(timeout()),this,SLOT(slottimedone()));

  定時時間一到就會發送timeout()信號,從而出發slottimedone()槽去完成某件事情。

  (3)開啟定時器,並設定定時周期

  開啟定時器有兩種方式,start(int time)和setSingelShot(true)。其中,第一種表示每隔“time”秒就會重啟定時器,可以重復出發定時,利用stop()將定時器關閉;而setSingleShot(true)則是僅啟動定時器一次。工程中常用的是前者,比如 time_clock->start(2000);

2.3 顯示控件組(Display Widegts)

        Lbael:標簽

        Text Browser:文本瀏覽器

        Graphics View:圖形視圖

        Calendar: 日歷

        LCD Number:液晶數字

                     Progress Bar:進度條

                     Horizontal Line:水平線

                     Vertical Line:垂直線

                     QDeclarativeView:向QML暴露數據視圖

        QQuickWidegt:快速布局

                     QWebView:web視圖

 

2.3.1 控件類介紹

(1)Graphics View對應於QGraphicsView類

(2)Text Browser對應於QTextBrowser類。QTextBrowser類繼承自QTextEdit,而且近視只讀的,對立面的內容並不能進行更改,但是相對於QTextEdit來講,它還具有鏈接文本的作用。

2.4 空間間隔組(Spacers)

    Horizontal Spacer:水平間隔

    Vertical Spacer:垂直間隔

 

2.5  布局管理組(Layouts)

    Vertical Layout: 垂直布局

    Horizontal Layout:橫向(水平)布局

    Grid Layout:網格布局

    Form Layout: 表格布局

2.6 容器組(Containers)

        Group Box:組框

        Scroll Area:滾動區域

        Tool   Box:工具箱

        Tab Widget:標簽小部件

        Stacked Widegt:堆疊部件

        Frame :幀

        Widget:小部件

        MdiArea:MDI區域

      Dock Widget:停靠窗口部件

      QAxWidget:封裝Flash的ActiveX控件

2.7 項目視圖組(Item Views)

   List View:清單視圖

   Tree View:樹視圖

   Tabel View:表視圖

   Column View:列視圖

2.8項目控件組(Item Widgets)

    List Widegt:清單控件

    Tree Widegt:樹形控件

    Tabel Widegt:表控件

 

三、 綜合樣例

 1 #ifndef DIALOG_H
 2 #define DIALOG_H
 3 
 4 #include <QDialog>
 5 
 6 namespace Ui {
 7 class Dialog;
 8 }
 9 
10 class Dialog : public QDialog
11 {
12     Q_OBJECT
13 
14 public:
15     explicit Dialog(QWidget *parent = 0);
16     ~Dialog();
17 
18 private:
19     Ui::Dialog *ui;
20 private slots:
21     void on_lineEdit_textChanged();
22 };
23 
24 #endif // DIALOG_H
 1 #include "dialog.h"
 2 #include "ui_dialog.h"
 3 
 4 Dialog::Dialog(QWidget *parent) :
 5     QDialog(parent),
 6     ui(new Ui::Dialog)
 7 {
 8     ui->setupUi(this);
 9     /*只允許第一個字元輸入大小寫英文字母,后面接一位非0的數字,再接0~2位可為0的數字*/
10     QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
11     //設置驗證器,即只能輸入正則要求的類型的輸入
12     ui->lineEdit->setValidator(new QRegExpValidator(regExp,this));
13     connect(ui->okButton,SIGNAL(clicked()),this,SLOT(accept()));
14     connect(ui->cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
15    
16 }
17 
18 Dialog::~Dialog()
19 {
20     delete ui;
21 }
22 
23 void Dialog::on_lineEdit_textChanged()
24 {
25     //當編輯框檢測到有輸入時,將ok按鈕設置為可用
26     ui->okButton->setEnabled(ui->lineEdit->hasAcceptableInput());
27 }

 四、 小結

  好了,到了這里關於模板庫、工具類和控件的內容就基本說完了,詳細的內容和重點會在以后的學習中相應的有所提及,最后希望自己能夠學得深入,也希望讀者能夠讀完有所收獲。


免責聲明!

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



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