Qt訊號槽傳遞自定義結構體

2021-09-23 17:08:41 字數 618 閱讀 5654

qt的訊號和槽可以傳遞int、double等c++常用型別變數,也可以傳遞qvector、qmap等qt的容器類(當然也可以傳遞qt定義的型別)。

那麼qt的訊號和槽如何傳遞自定義的結構體呢。

首先在定義結構體的同時需要使用q_declare_metatype。通過這個巨集定義可以將自定義的型別註冊到qt的元型別中,從而被qt識別。

其次在訊號端發射的訊號型別應該是qvariant,qvariant是多種型別的聯合,qvariant類中有個setvalue(t& value)方法,將自定義 t 型別的資料儲存到qvariant物件中,可以理解為是自定義型別被封裝成了qvariant的形式,這樣,我們自定義的t型別的物件就能夠通過所有引數和返回值為qvarian型別傳遞。

在發射訊號之前,將自定義的結構體用qvariant包裹一下,就可以發**。

在槽函式這邊,訊號型別也定義為qvariant,接收後用該結構體將資料取出來就完成了自定義結構體訊號的一次傳遞

QT 訊號槽傳遞自定義資料結構

定義乙個結構體 struct mystruct 通過訊號槽傳遞該結構體 connect this,signal m signal mystruct this,slot m slot mystruct 這樣做是行不通的,正確的做法 通過q declare metatype宣告自定義的結構體 struc...

Qt自定義訊號槽

qt自定義訊號槽,在控制台程式中實現 qt5 如下 qt5 include news h class news public qobject void send signals void new const qstring name private qstring m name reader.h i...

Qt 自定義訊號槽

使用 connect 可以讓我們連線系統提供的訊號和槽。但是,qt 的訊號槽機制並不僅僅是使用系統提供的那部分,還會允許我們自己設計自己的訊號和槽。這也是 qt 框架的設計思路之一,用於我們設計解耦的程式。本節將講解如何在自己的程式中自定義訊號槽。訊號槽不是 gui 模組提供的,而是 qt 核心特性...