色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳細介紹Qt的信號與槽交流機制

OpenCV學堂 ? 來源:OpenCV開發者聯盟 ? 2023-02-21 09:35 ? 次閱讀

引言

前面講各種事件響應的時候說過一些關于信號與槽的綁定,實現相關的事件響應,但是并沒有深入跟詳細的介紹,之前的事件信號基本上都是QT的build-in信號,響應的槽函數基本上都是用戶自定義的函數,本文將會詳細介紹Qt的信號與槽交流機制。

元對象系統

PyQT5中QGUI中當用戶改動一個QWidget的狀態時,可以通過支持的信號觸發相關的槽函數完成動作交互。其它的GUI庫多數都是通過Callback(回調)實現消息傳遞與觸發,QT的這種方法在更廣泛的層面是它底層的元數據對象系統(Meta-Object System )。元數據對象系統提供了信號與槽機制在不同的對象內容交互數據與信息,元數據對象支持信號與槽機制主要依賴:

- 所有的QWidget對象都是QObject類都是元數據
- C++使用Q_OBJECT宏定義在私有變量中的類才是元數據
- 元數據對象編譯器會提供QObject類子類完成必要的代碼實現元對象特性

信號與槽

信號與槽機制中在GUI層面的信號主要是指靠用戶觸發特定事件產生,所以QWidget對象不同GUI組件預定義了大量的內置信號,開發者在使用這些QWidget組件時只要把這些信號綁定到自定義的槽函數即可實現特定事件的響應觸發特定方法。任意一個綁定信號的響應函數都可以被稱為槽函數,槽函數跟信號是松散耦合的關系,只有當槽函數被鏈接到特定信號的時候它才會響應特定事件。一個槽函數可以被鏈接到多個信號實現響應,同樣一個信號可以被不同的槽函數鏈接。信號與槽是QT編程架構中最重要的組件之一。

信號

PyQT5中的信號分為兩種一種是build-in的信號,主要是跟不同QWidget組件產生特定關聯,比如valueChanged、toggled、clicked等這些信號;另外一類信號是開發者自定義信號,這些信號可以幫助開發者實現數據交互、特定界面刷新、在不同線程之間傳遞消息等等。builid-in的信號不需要開發者激發,開發者只要綁定到特定的槽函數即可實現在動作響應時自定激發;自定義信號必須通過顯式調用的方式激發:

custom_signal.emit(parameters)

槽函數

任何一個正常的函數都可以成為槽函數,類的實例方法通過信號鏈接成為槽函數之后被直接調用而不需要開發者再初始類實例代碼。相比直接通過接口回調的方式,信號與槽架構方式帶來了很大的靈活性,但是同時也會帶來更多的執行調用時間,QT官方文檔指出這樣方法相比回調響應過程會慢一點。

代碼演示部分

代碼演示部分只演示自定義信號跟自定義槽函數是如何工作的,build-in信號跟自定義槽函數在之前的文章中實際已經演示了很多次,這里不在重復代碼演示。

數據類含有自定義信號

 1classMyTextData(QtCore.QObject):
 2fire_draw_text_signal=QtCore.pyqtSignal(str)
 3
 4def__init__(self):
 5super(MyTextData,self).__init__()
 6print("createmytext...")
 7self.text_content="OpenCV開發者聯盟"
 8
 9deftext_changed(self,text):
10self.text_content=text
11self.fire_draw_text_signal.emit(self.text_content)
初始化,綁定自定義信號與自定義槽函數
1#初始化自定義數據類
2self.my_data=MyTextData()
3self.my_data.fire_draw_text_signal.connect(self.show_text)
4self.my_data.text_changed("自定義信號演示")
自定義槽函數
 1defshow_text(self,text):
 2painter=QtGui.QPainter(self.label.pixmap())
 3pen=QtGui.QPen(QtCore.Qt.green)
 4painter.setPen(pen)
 5font=QtGui.QFont()
 6font.setBold(True)
 7font.setPointSizeF(24)
 8painter.setFont(font)
 9painter.drawText(QtCore.QPoint(20,50),"OpenCV演示-"+text)
10painter.end()
觸發與調用
 1defon_update_gray(self):
 2image=cv.imread("images/test5.png")
 3gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
 4dst=cv.cvtColor(gray,cv.COLOR_GRAY2RGB)
 5height,width,channel=dst.shape
 6bytesPerLine=3*width
 7img=QtGui.QImage(dst.data,width,height,bytesPerLine,QtGui.QImage.Format_RGB888)
 8pixmap=QtGui.QPixmap(img)
 9pix=pixmap.scaled(QtCore.QSize(620,500),QtCore.Qt.KeepAspectRatio)
10self.label.setPixmap(pix)
11self.my_data.text_changed("圖像灰度化")
會自動繪制指定文本到QLabel標簽的圖像上,代碼運行結果如下:

41de6f62-b131-11ed-bfe3-dac502259ad0.png

42074ff4-b131-11ed-bfe3-dac502259ad0.png

42307f32-b131-11ed-bfe3-dac502259ad0.png






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • GUI
    GUI
    +關注

    關注

    3

    文章

    661

    瀏覽量

    39715
  • 回調函數
    +關注

    關注

    0

    文章

    87

    瀏覽量

    11573
  • pyqt5
    +關注

    關注

    0

    文章

    25

    瀏覽量

    3403

原文標題:PyQT5開發之自定義信號與槽函數詳解

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Qt信號機制(一)

    一. 簡介就我個人來理解,信號機制與Windows下消息機制類似,消息機制是基于回調函數,Qt
    發表于 11-07 15:06

    Qt信號例子(二)

    ))); } //實現用于接受pb點擊信號void MyMainWindows::SlotTest(){label->setText("clicked");//發送自定義的信號,請注意信號
    發表于 11-07 15:13

    QT自動鏈接信號機制

    name中的信號signal name和這個void on__()鏈接起來。這是QT不需要connect語句就可以自動鏈接信號
    發表于 11-13 09:17

    【NanoPi M1 Plus試用體驗】【結項】-基于Qt環境下的FTP服務工具開發

    Designer進行界面設計,由一個主界面和三個子界面組成。(3)添加代碼 建立信號函數映射機制信號
    發表于 06-08 14:51

    請問Qt編程中信號信號處理程序的使用方法?

      信號作為Qt的和新機制,在Qt編程中有著非常廣泛的應用?! ∈聦嵣?,我們在Qt開發中,要
    發表于 11-20 08:03

    信號是如何實現連接的呢

    1.的連接過程分析Unix Signal產生者(鍵盤) --> 綁定[signal(id,某函數())] --> 接受者(“.c文件中的函數處理”)Qt 信號產生者(按鈕等
    發表于 01-18 09:48

    基于Qt的遙控式設備控制的設計與實現

    采用Qt 的一次編寫多處編譯運行機制和其強大的信號機制,首先基于Qt 設計了遙控式控制設備的
    發表于 08-17 08:37 ?14次下載

    Qt5主窗體的詳細中文資料免費下載

    本文檔的主要內容詳細介紹的是Qt5主窗體的詳細中文資料免費下載內容包括了:Qt 5主窗體構成,Qt
    發表于 08-01 08:00 ?0次下載
    <b class='flag-5'>Qt</b>5主窗體的<b class='flag-5'>詳細</b>中文資料免費下載

    Qt5位置相關函數及圖形與圖片的詳細資料免費下載

    本文檔的主要內容詳細介紹的是Qt5位置相關函數及圖形與圖片的詳細資料免費下載內容包括了:Qt 5位置相關函數,
    發表于 08-01 08:00 ?0次下載
    <b class='flag-5'>Qt</b>5位置相關函數及圖形與圖片的<b class='flag-5'>詳細</b>資料免費下載

    Qt Creator的詳細資料簡介

    本文檔的主要內容詳細介紹的是Qt Creator的詳細資料簡介包括了:1 Qt Creator的下載和安裝2
    發表于 12-26 16:59 ?33次下載
    <b class='flag-5'>Qt</b> Creator的<b class='flag-5'>詳細</b>資料簡介

    Qt5 學習之路及嵌入式開發教程3:設計器Designer實現信號例子

    Qt5 學習之路及嵌入式開發教程3:設計器Designer實現信號例子一、界面設計1、單擊運行Qt Creator,新建項目選擇,出現“項目介紹
    發表于 11-03 19:06 ?1次下載
    <b class='flag-5'>Qt</b>5 學習之路及嵌入式開發教程3:設計器Designer實現<b class='flag-5'>信號</b><b class='flag-5'>槽</b>例子

    Qt編程基礎之信號機制

    在使用信號的類中,必須在類的定義中加入宏Q_OBJECT。當一個信號被發射時,與其關聯的函數會被立即執行,就像正常調用一個函數一樣。只有當信號
    的頭像 發表于 09-06 13:01 ?1096次閱讀

    一文詳解Qt信號函數機制

    信號用于多個對象之間的通信。信號機制Qt的核心特性,也是
    的頭像 發表于 02-07 09:14 ?3289次閱讀

    Qt“懶人寫法”之一鍵破“

    在《Qt信號函數機制,此篇足矣》一文中已經描述了Qt信號
    的頭像 發表于 02-09 17:23 ?1025次閱讀

    Qt“靈魂”之Meta-Object系統

    Meta-Object即是Qt的元對象系統,下文都以元對象系統進行描述。在Qt中,具有標志性特征的則是信號函數機制,該
    的頭像 發表于 02-10 13:50 ?2008次閱讀
    主站蜘蛛池模板: aaaaaaa一级毛片| 国产69精品久久久久乱码免费| 国产AV无码成人黄网站免费| 日本熟妇乱妇熟色A片蜜桃亚洲| xiao776唯美清纯| 日韩爽爽影院在线播放| 国产交换丝雨巅峰| 亚州综人网| 绝逼会被锁| 大胆国模一区二区三区伊人| 学校捏奶揉下面污文h| 精品国产福利一区二区在线| 757一本到午夜宫| 日日撸影院在线| 加勒比一本之道高清视频在线观看| 做a爱片的全过程| 少妇被阴内射XXXB少妇BB| 寂寞夜晚视频在线观看| FREECHINESE东北女人真爽| 特级毛片AAAAAA| 久久亚洲高清观看| 大香伊蕉在人线国产97| 野花影院手机在线观看 | 国产亚洲精品久久久久5区| 中文字幕成人免费高清在线| 色欲久久精品AV无码| 精品久久久无码21P发布| free18sex性自拍裸舞| 亚洲国产精品综合久久一线| 美女脱衣服搞鸡| 国产三级在线精品男人的天堂 | ava云直播| 亚洲精品www久久久久久| 美女扒开尿孔| 国产精品成人影院在线观看| 2019夜夜| 午夜理伦大片一级| 嗯啊快停下我是你老师啊H| 国产三级在线精品男人的天堂| 99久久爱看免费观看| 亚洲国产av|