2.QT-窗口組件(QWidget),QT坐標系統,初探消息處理(信號與槽)
本章主要內容如下:
- 1) 窗口組件(QWidget)
- 2) QT坐標系統
- 3) 消息處理(信號與槽)
介紹
- Qt以組件對象的方式構建圖形用戶界面
- Qt中沒有父組件的頂級組件,則被叫做窗口
- 組件的類型分為:
- 容器類(父組件) : 用於包含功能的界面組件
- 功能類(子組件) : 用於實現特定的交互功能
如下圖所示:
比如上面的QgroupBox ,即屬於頂級組件的功能類(子組件),又是3個功能類組件的父組件(容器)
組件繼承
Qt中所有窗口組件都繼承於QWidget類,而QWidget類又繼承於QObject類和QPaintDevice類.
如下圖所示(只舉例了3個窗口組件類):
(因為子類可以初始化父類)
- QWidget類對象常作為父組件或頂級組件使用
<span "="" src="https://images2018.cnblogs.com/blog/1182576/201804/1182576-20180418161544015-482903249.png">
2)生成QWidget模板
運行模板:
可以看到生成了一個窗口,然後我們來看看模板代碼,是如何生成的.
3)模板代碼如下所示
根據之前講的內容可以發現,由於上面的QWidget w對象沒有父組件,所以QWidget w便成為了沒有父組件的頂級組件,從而生成了窗口.
介紹
- Qt使用統一的坐標系統
- QWidget類為組件類提供了窗口部件所需的坐標系統成員函數
在Qt裏,坐標類型分為
- 頂級窗口部件的定位
- 窗口內部件的定位
- 窗口部件的大小設置
坐標位置示意圖,如下所示
QWidget類提供的常用坐標系統成員函數有:
- resize() : 設置窗口內部的寬高( width()和height()值)
- move() : 設置整個窗口的x,y坐標( x()和y()值)
- setGeometry() : 設置窗口內部的x,y,w,h(不包括標題和窗口邊框)
- size() : 獲取窗口部件的大小
- pos() : 獲取窗口部件的位置
- x() :
- y() : 獲取整個窗口y坐標
- width() : 獲取窗口內部的寬度(不包括外邊框的寬度)
- height() : 獲取窗口內部的高度(不包括窗口標題欄的高度)
- const QRect& geometry () : 獲取窗口內部的x,y,w,h(不包括標題和窗口邊框)
- const QRect& framgeometry () : 獲取整個窗口的x,y,w,h
可以參考下圖所示
註意: 在代碼裏,執行show()後, 再獲取 x,y,w,h坐標 才有效
窗內坐標(x,y)永遠比窗外坐標大,窗外大小(w,h)永遠比窗內大小大
<span "="" src="https://images2018.cnblogs.com/blog/1182576/201804/1182576-20180418161805084-1785084822.png">
<span "="" src="https://images2018.cnblogs.com/blog/1182576/201804/1182576-20180418161813765-1754445609.png">
connect()函數原型
在信號與槽裏,Qt引進了幾個新的關鍵字:
- SIGNAL :指定消息名(信號),用於connect()函數裏
- SLOT : 指定消息處理函數名(槽),用於connect()函數裏
- Q_OBJECT : 指定該類擁有槽(消息處理),托福和雅思在類聲明的內部開始處加上Q_OBJECT即可
- slots : 用於在類中聲明消息處理函數,比如:
其中上面的quit() 和clicked()都是系統預定義好的,接下來我們自定義槽
首先需要註意
- 類中聲明槽(處理信號的成員函數)時,需要slots聲明
- 槽和信號的函數參數必須一致,比如clicked()和quit()都是無參數的
- SIGNAL和SLOT指定的函數(信號和槽)只能包含參數類型,不能包含參數名
開始試驗,通過不同按鈕點擊,來打印不同的信息
寫QButtonDebug.h:
寫QButtonDebug.cpp:
寫main.cpp
運行測試
如下圖所示,可以看到通過點擊不同的按鈕,便能打印不同的信息出來
介紹
- 只有Qt類才能定義信號,且該類必須在頭文件中聲明
- 信號函數只能通過signals關鍵字進行聲明,不能定義,且返回值必須是void類型
- 信號函數的屬性會被自動設置為protected類型
- 發送信號時,只需要通過emit關鍵字調用信號函數即可
- 如果信號函數的參數多於槽函數時,多於的參數將被忽略
- 槽函數的返回值必須是void類型,且可以被其它普通成員函數調用
自定義信號示例:
自定義槽函數示例:
信號與槽的組合
- 信號函數可以連接多個槽函數
- 多個信號函數可以連接一個槽函數
- 一個信號就可以連接到另一個信號
- 通過connect函數進行連接,也可以通過disconnect函數取消連接
示例1-多個信號連接一個槽:
打印:
示例2-信號1連接信號2,信號2連接槽:
打印:
文章來源:https://www.cnblogs.com/lifexy/p/8876016.html
2.QT-窗口組件(QWidget),QT坐標系統,初探消息處理(信號與槽)