QT 信號與槽 connect 三種寫法

先看下示例:

    QPushButton *btn = new QPushButton;// 方式一:老式寫法connect(btn, SIGNAL(clicked()), this, SLOT(close()));// 方式二:Qt5后新寫法connect(btn, &QPushButton::clicked, this, &MainWindow::close);// 方式三:lambda表達式connect(btn, &QPushButton::clicked, this, [&]() {this->close();});

方式一:

老式寫法,在編譯的時候即使信號或槽不存在也不會報錯,但是在執行的時候無效,對于C++這種靜態語言來說,這是不友好的,不利于調試;

方式二:

Qt5后推薦的寫法,如果編譯的時候信號或槽不存在是無法編譯通過的,相當于編譯時檢查,不容易出錯,還有就是槽的寫法可以直接寫在public控制域下,不一定非要寫在public slots:控制域下;

方式三:

采用了lambda表達式的寫法,更加方便快捷。

關于lambda需要注意一點:

QTimer::singleShot(3000, /* this, */ [&]{this->close();});connect(btn, &QPushButton::clicked, /* this, */ [&]() {this->close();});

看下上面的示例,當我們用lambda表達式的時候,槽的接收者QObject是可以省略不寫的,這時候Qt會默認發射者與接收者屬于同一個QObject;

    //connect to a functortemplate <typename Func1, typename Func2>static inline typename std::enable_if<QtPrivate::FunctionPointer<Func2>::ArgumentCount == -1, QMetaObject::Connection>::typeconnect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, Func2 slot){return connect(sender, signal, sender, slot, Qt::DirectConnection);}

當我們省略槽函數接收者QObject時,那我們就必須要注意lambda內成員的生命周期;

例如示例的singleShot,若在槽函數響應前,this已經銷毀變為無效指針,后果就會很嚴重!!!

為什么?

我們知道,connect的發射者與接收者任意一個銷毀,那么這個connect就已經斷開了;

當我們省略接收者QObject的時候,發射者與接收者屬于同一個QObject;

在上面的示例中,信號槽connect關聯依然存在,信號槽依然會觸發,但此時this已經被銷毀就不好玩了!

另外:

?使用lamda表達式的話就不能用SIGNAL函數,不然會報錯
connect(timerChart, &QTimer::timeout, this,[&]{timer_count+=0.2;});
SIGNAL函數和SLOT函數要一起用
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208362.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208362.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208362.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Word插件-好用的插件-一鍵設置字體--大珩助手

常用字體 整理了論文、公文常用字體 整理了常用的論文字體&#xff0c;可一鍵設置當前節或選擇的文字的字體 字體設置 包含字體選擇、字體顏色 特殊格式 包含首字下沉、段落分欄、統一寬度、雙行合一、上標切換、下標切換、轉為全角、轉為半角、挖詞填空、當前日期、大寫金…

LabVIEW開發遠程結構健康監測系統

LabVIEW開發遠程結構健康監測系統 工程師依賴于振動監測來評估建筑物、橋梁和其他大型結構的完整性。傳統的振動監測工具在數據收集上存在限制&#xff0c;無法長時間收集高保真波形。隨著內存存儲、處理器速度和寬帶無線通信技術的進步&#xff0c;出現了對能夠長時間收集并實…

Navicat 技術指引 | 適用于 GaussDB 分布式的查詢功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結…

深入了解對象與內置構造函數

1. 深入對象 1.1 創建對象的三種方式 1.2 構造函數 語法約定&#xff1a; 總結 構造函數可以快速創建多個對象大寫字母開頭的函數使用new關鍵字將對象實例化構造函數不需要返回值自動返回新的對象 new實例化的執行過程 創建空對象this指向對象執行代碼&#xff0c;追加新…

使用wire重構商品微服務

一.wire簡介 Wire 是一個輕巧的Golang依賴注入工具。它由Go Cloud團隊開發&#xff0c;通過自動生成代碼的方式在編譯期完成依賴注入。 依賴注入是保持軟件 “低耦合、易維護” 的重要設計準則之一。 此準則被廣泛應用在各種開發平臺之中&#xff0c;有很多與之相關的優秀工…

使用pyftpdlib組件實現FTP文件共享

目錄 一、引言 二、技術背景 三、實現邏輯 1、創建FTP服務器&#xff1a; 2、實現文件共享&#xff1a; 3、設置用戶權限&#xff1a; 4、處理異常&#xff1a; 5、優化與擴展&#xff1a; 四、代碼實現 五、測試與評估 測試用例&#xff1a; 評估方法&#xff1a;…

React/Vue/Svelte 前端項目中開始使用TailwindCSS

背景 TailwindCSS 近年來在前端圈非常流行&#xff0c;它擺脫了原有的CSS限制&#xff0c;以靈活實用為賣點&#xff0c;用戶通過各種class組合即可構建出漂亮的用戶界面。對于初學者而言&#xff0c;可能需要一些上手成本&#xff0c;一旦掌握實用技巧后&#xff0c;Tailwind…

Unity中Batching優化的GPU實例化整理總結

文章目錄 前言一、GPU Instancing的支持1、硬件支持2、Shader支持3、腳本支持 二、我們來順著理一下GPU實例化的使用步驟1、GPU實例化前的C#代碼準備2、在 appdata 和 v2f 中定義GPU實例化ID3、在頂點著色 和 片元著色器 設置GPU Instance ID&#xff0c;使實例化對象頂點位置正…

Docker的資源控制

Docker的資源控制&#xff1a; 對容器使用宿主機的資源進行限制。 CPU 內存 磁盤I/O(讀寫性能) docker使用linux自帶的功能cgroup control groups是linux內核系統提供的一種可以限制&#xff0c;記錄&#xff0c;隔離進程組所使用的物理資源的一種機制。 docker借助這個機制…

go grpc高級用法

文章目錄 錯誤處理常規用法進階用法原理 多路復用元數據負載均衡壓縮數據 錯誤處理 gRPC 一般不在 message 中定義錯誤。畢竟每個 gRPC 服務本身就帶一個 error 的返回值&#xff0c;這是用來傳輸錯誤的專用通道。gRPC 中所有的錯誤返回都應該是 nil 或者 由 status.Status 產…

如何克服微服務測試的挑戰,并最大化收益

多年來&#xff0c;微服務一直是行業趨勢&#xff0c;但組織卻未能從該方法中獲益&#xff0c;并因發布失敗而苦苦掙扎。這些失敗通常歸結為測試服務之間的接口以獲得預期的質量、安全性和性能的困難。 最終&#xff0c;未能以足夠穩健的方式測試這些 API。一線希望是遺留 SOA…

cookie總結

cookie和session&#xff1a; 一、Cookie和Session二、使用Cookie保存用戶上次的訪問時間。三、Cookie常用方法總結亂碼問題解決&#xff1a; 一、Cookie和Session 會話&#xff1a;用戶從打開瀏覽器到關閉的整個過程就叫1次會話。 比如有的網站登錄過一次&#xff0c;下次再進…

Gitleaks - 一款高效的Github倉庫敏感信息泄露查詢工具

Gitleaks - 一款高效的Github倉庫敏感信息泄露查詢工具 1.工具概述2.安裝3.參數解析4.使用1.工具概述 Gitleaks 是一種 SAST 工具,用于檢測和防止 git 存儲庫中的硬編碼機密,如密碼、API 密鑰和令牌 Gitleaks 是一個開源工具,用于檢測和防止簽入 Git 存儲庫的機密(密碼/A…

使用 Kubernetes 為 CI/CD 流水線打造高效可靠的臨時環境

介紹 在不斷發展的科技世界中&#xff0c;快速構建高質量的軟件至關重要。在真實環境中測試應用程序是及早發現和修復錯誤的關鍵。但是&#xff0c;在真實環境中設置 CI/CD 流水線進行測試可能既棘手又昂貴。 Kubernetes 是一個流行的容器編排平臺&#xff0c;提供臨時環境解決…

【qt】Qt+OpenCv讀取帶有中文路徑的圖片

【opencv4.5.1版本】下載exe解壓即可。。。https://opencv.org/releases/page/2/ 【qt5.15.2】 pro文件 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In order to …

YOLOv8配置文件yolov8.yaml解讀

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制 位置 該文件的位置位于 ./ultralytics/cfg/models/v8/yolov8.yaml 模型參數配置 # Parameters nc: 80 # number of classes scales: #…

碩士畢業論文格式修改要點_word

目錄 0、最開始要做的事情1、更改樣式&#xff08;先善器&#xff09;2、多級標題&#xff08;解決自動更新問題必要的基礎設置&#xff09;2、插入圖片&#xff08;1&#xff09;設置一個圖片樣式——“無間隔”&#xff08;2&#xff09;插入題注&#xff08;3&#xff09;修…

redis.conf詳解之replica-read-only

本文基于 redis_version:6.2.5 用法 控制從節點允許讀寫操作&#xff0c;還是讀操作。 replica-read-only yes 1 注意事項&#xff1a; 默認yes&#xff0c;只讀操作。 replica-read-only支持參數[yes,no]&#xff0c;no 支持讀寫操作。 這里說的從節點&#xff0c;是普通…

【flink番外篇】1、flink的23種常用算子介紹及詳細示例(完整版)

Flink 系列文章 一、Flink 專欄 Flink 專欄系統介紹某一知識點&#xff0c;并輔以具體的示例進行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關基礎內容。 2、Flink基礎系列 本部分介紹Flink 的基礎部分&#xff0c;比如術語、架構、編程模型、編程指南、基本的…

小白學java棧的經典算法問題——第四關白銀挑戰

內容1.括號匹配問題2.最小棧3.最大棧 1.括號匹配問題 棧的典型題目還是非常明顯的&#xff0c;括號匹配、表達式計算等等幾乎都少不了棧&#xff0c;本小節我們就看兩個最經典的問題 首先是LeetCode20,鏈接 本道題還是比較簡單的&#xff0c;其中比較麻煩的是如何判斷兩個符…