日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt学习之路3 ---信号与槽机制

發布時間:2025/3/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt学习之路3 ---信号与槽机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?信號和槽機制

1.概述

Qt采用了一種全新的對象和方法的關聯與通信機制,稱為信號和槽機制。信號和槽機制是獨立于標準C++編譯器的,在編譯之前需要經過Qt的專門預處理工具MOC(Meta Object Compiler,元組件編譯器)對代碼進行預處理后才能進一步進行C++代碼的編譯。MOC會將Qt應用程序中特有的代碼自動轉化為相應的標準C++語法代碼。

信號和槽的概念是Qt編程中最具代表性的特點之一。GUI編程中通常使用回調函數進行事件處理,而回調函數通常是一個函數指針,不同的事件、不同的對象都有著各自的回調函數。當事件到來時,系統會通過調用對應的回調函數來完成相應的處理。

Qt引入了信號和槽機制來取代回調函數。凡是繼承自QObject的類都可以具有信號和槽成員,并可以使用它們。信號和槽的使用可以有效地減少函數指針的使用,使程序代碼清晰簡潔,對于事件響應管理更加容易。此外,信號和槽沒有嚴格規定函數的類型,因此在調用過程中是安全的。

信號和槽的使用可以實現信息封裝,增加程序的靈活性。信號和槽都采用函數作為存在形式。在Qt程序初始化或運行的過程中,可以靜態或動態地將信號和槽相關聯。當某一事件到來時,會發射信號,但是發射后,它并不需要關心信號的處理者是誰。當觸發槽函數時,說明與其關聯的信號被接收,但它不需要了解誰發出了信號,它只需要負責進行相應的處理即可。

2.信號

信號是Qt中對事件的一種抽象,當一個事件到來時,會發射信號。所謂的發射信號,就是通過Qt中特有的通信機制,調用和信號相關的各個槽函數。因此當發射信號時,將執行與其相關聯的槽函數。信號采用函數的形式,因此,當所有與信號關聯的函數全部返回后,信號函數才會返回。信號函數在形式上與標準C++中的虛函數類似,信號函數只有頭文件中函數的聲明,而沒有函數的定義(即函數體)。信號的聲明形式如下:

  • signal: ?
  • void?MySignal(); ?
  • void?MySignal(int?x); ?
  • void?MySignalParam(int?x,?int?y);?
  • 對于信號的聲明與普通的C++函數無異,它不限制參數的個數與類型,同時它還支持重載。不過信號的返回值只要求必須為void型,因為事件是一種中斷,對于突發性的中斷,不可能期望其有返回值。

    3.槽

    槽是Qt中負責信號處理的實體,當有信號發射時,與信號關聯的所有槽會依次執行。槽也采用函數的形式,不過槽需要有實際的函數定義,相當于在標準C++中對虛函數的多態實現。槽函數的聲明形式如下:

    ?

  • public?slot: ?
  • void?MySlot(); ?
  • void?MySlot(int?x); ?
  • void?MySlotParam(int?x,?int?y);?
  • ?

    與信號相同,槽函數的定義同普通的C++函數無異,支持C++函數的一些特性。同時,槽函數可以采用標準C++函數的使用方式,在代碼中直接調用。槽函數具有訪問權限的標識,它們同C++類的成員函數的標識相同,分別為:public、protected、private。public說明該槽函數可以被其他類的信號所關聯,protected說明只能被類本身和其子類的信號所關聯,private說明該槽函數只能被類本身的信號所關聯。

    在Qt的基類QObject中有一個成員函數用來完成信號和槽的映射,函數的原型如下:

  • #include?<QObject>?
  • static?bool?QObject::connect?(const?QObject?*sender,
    const?char?*signal,?const?QObject?*receiver,?const?char?*member);?
  • ?

    其中,sender和receiver分別指定了被關聯的信號和槽的發送者和接收者。signal是信號,Qt要求必須使用宏SINGAL將信號函數指針轉化為指定的類型。member是槽,Qt要求必須使用宏SLOT轉化函數指針。宏SINGAL和SLOT的參數形式如下:

  • SIGNAL(funname(param_type_1,?param_type_2,?…)) ?
  • SLOT(funname(param_type_1,?param_type_2,?…))?
  • ?

    其中,funname是函數名,param_type_x是函數中對應參數的類型。

    轉載于:https://blog.51cto.com/5815084/971673

    總結

    以上是生活随笔為你收集整理的qt学习之路3 ---信号与槽机制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。