1. 程式人生 > >2.QT-窗口組件(QWidget),QT坐標系統,初探消息處理(信號與槽)

2.QT-窗口組件(QWidget),QT坐標系統,初探消息處理(信號與槽)

屬於 tde 部件 試驗 main.c 技術 有效 .cn com

本章主要內容如下:

  • 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() :
    獲取整個窗口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坐標系統,初探消息處理(信號與槽)