初學Qt(一)
- 2019 年 10 月 7 日
- 筆記
如果是一個小白,那麼該如何學習Qt呢?接下來我從自己的學習經歷中總結一下,希望對初學Qt的同志能有一點兒幫助。
一、初識Qt——信號和槽、跨平台開發框架
首先要知道的是Qt是基於C++的跨平台應用程序開發框架,所謂跨平台就是你在Windows下寫的程序放在Linux下也能用,而且圖形化風格也會隨着系統的改變而改變。此外它擁有大量的組件,以方便和加速開發過程,如它的IDE(集成開發環境)—— Qt Creator、Qt Designer、Qt Assistant等,還有很多,不一一列舉。除此之外,提到Qt我們可能最先想到的就是信號和槽——它為我們提供了一種方便對象間通訊的機制。舉個例子,你的應用程序界面有個按鈕,你想讓它在被按下後彈出一個Qt入門程序Demo與講解的對話框,
可能對於初學者而言還是有點蒙圈,不過沒關係,現在知道Qt能跨平台、有一個獨特的信號和槽的機制就可以了。
二、應用程序類型與三大界面基類
Qt開發環境搭建完成後,我們會建立自己的工程(工程就是Qt會把預處理、編譯、彙編、鏈接等工作搞定),之後寫下第一個關於Qt的程序。在創建工程這塊,我要說的是要了解Qt提供的一些模板:如左側第一個默認的是應用程序,第二個是創建庫模板。在右側,創建應用程序可以是窗體程序或是控制台程序(沒有圖像化界面),其他的類型沒有使用過,不做介紹。如果左側選擇的是Library模板,對應右側會是不同的選項。
以我們常用的應用程序和窗體程序為例,必須要繼承三大基類中的一個。他們分別是QMainWindow、QWidget、QDialog。MainWindow帶有菜單條,工具條和一個狀態條的主應用程序窗口;Widget是所有用戶界面對象的基類,窗口部件是用戶界面的一個基本單元 ;Dialog是對話框窗口的基類,對話框窗口主要用於短期任務和用戶進行短期通訊的頂級窗體。下方Generate form默認是勾選的,也就是創建.ui文件。不是很懂?沒關係,每次建工程都會選,選着選着就會有感情了。
三、Qt控件概述與應用舉例
Qt的控件有很多很多,直到現在我也有很多沒有用過。說到這,提一下,我們可以使用Qt Designer的快速設計和布局各種窗體部件,也可以使用純代碼進行窗體設計。初學者建議先使用Designer進行設計。
開啟PPT模式:
Layouts:布局器,垂直、水平、柵格布局等方式
Buttons:各種按鈕,單選按鈕、多選按鈕、對話框按鈕等
Item Views:Qt Model/View的顯示部分,列表、樹、表格等,使用時需要通過Model設置數據源
Item Widgets:Model/View的簡便類,可直接進行增刪改查等功能
Containers:容器,很常用。。。常用到可能會單獨說一說。
Input Widgets:輸入窗體,可以自己繼承裏面的Plain Text Edit或Text Edit控件自己實現一個文本編輯器
Display Widgets:顯示窗體。
這塊通過一個小Demo串幾個知識點:信號和槽,控件的簡單使用,如何根據自己的功能去查找文檔以及有一點難度的應用。總共三小部分:
①點擊一個按鈕,彈出一個標題為「閑魚搜索」的通知對話框,
對話框為HTML樣式的「Qt入門程序與Demo講解!!!」。這個是通
過信號和槽實現的。
②Input Widgets下的lineEdit,通過Qt幫助文檔查找一些信號和槽。
Linux 下Qt Assistant 在Qt安裝目錄/opt/Qt5.5.1/5.5/gcc/bin下
③lineEdit本身沒有鼠標點擊焦點的信號發出,我想在編輯框被點
擊時得到信號,該如何操作?
①打個廣告。。
這裏面可以設置HTML樣式的顯示。
QMessageBox::information(this,tr("閑魚搜索"), tr("<font color=red><h2>Qt入門程序 與Demo講解!!!</h2></font>")) ;
②lineEdit 幫助文檔閱讀
紫色部分是該類需要包含的頭文件、模塊以及它的基類
點擊上邊圖片那個More,找到了幾個信號,我們試一下。這裏面提下,Qt調試信息輸出需要包含QDebug類,使用qDebug()輸出。我們看到字符改變會立即將信號傳遞到槽中輸出,按下回車鍵後對應的槽也進行了響應。挺好玩的。
③如何獲取點擊lineEdit編輯框的通知(定製自己想要的功能)
lineEdit編輯框被點擊時是沒有信號發出的,若想得到這個通知,有兩種方式:
一是繼承QLineEdit,自己重新實現鼠標點擊事件,二是使用事件過
濾器。下面我們以事件過濾器為例:
lineEdit安裝事件過濾器,重新實現eventFilter(QObject
*watched, QEvent *event)。打印下結果如下圖: