1. 程式人生 > >QT 如何繫結自定義訊號槽

QT 如何繫結自定義訊號槽

一 原理

qt中不能繫結非基本型別的訊號槽,例如自己的結構體等。

二 方法

此時就需要我們用qt自帶的方法註冊一下這個訊號槽,

例子:有如下一個自定義引數的訊號

 void drawInfo(SDRAWINGDATA &drawInfo , DATATYPE type); 

會報如下錯誤


我們在connect之前註冊一下就ok了

 qRegisterMetaType<SDRAWINGDATA>("SDRAWINGDATA&");
    qRegisterMetaType<DATATYPE>("DATATYPE");

此時在執行程式就可以正常連結了

三 拓展

對於qt我們很多時候會發送結構體,結構體內部儲存很多資訊,但是此時就存在一個拷貝問題,所以大多數情況下我們都會直接傳送引用的訊號

這裡自定義的註冊也是可以傳送引用的訊號的方法如下

 qRegisterMetaType<SDRAWINGDATA>("SDRAWINGDATA&");

註冊的時候第二個字串要加一個&就可以拉。