qt 訊號和槽函式引數只能是基於 qt 的基礎型別的,比如 qstring、int、bool 等,如果想傳遞自定義型別預設情況下是行不通的。
下面以結構體為例,實現結構體型別資料的傳遞
標頭檔案:
#ifndef mainwindow_h
#define mainwindow_h
#include #include#includenamespace ui
class mainwindow : public qmainwindow
mystruct;
private slots:
void on_testbtn_clicked();
signals:
void adddocitemsignalnew(mystruct variant);
private slots:
void adddocitemnew(mystruct variant);
};#endif // mainwindow_h
cpp檔案
#include "mainwindow.h"
#include "ui_mainwindow.h"
mainwindow::mainwindow(qwidget *parent) :
qmainwindow(parent),
ui(new ui::mainwindow)
mainwindow::~mainwindow()
void mainwindow::on_testbtn_clicked()
void mainwindow::adddocitemnew(mystruct variant)
{ qdebug()《與傳統的int等型別相比,只增加了
qregistermetatype("mystruct");
這樣包裝後,我們就可以使用 qt 的訊號和槽功能來傳遞自定義資料結構了。
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 核心特性...
在QT的訊號和槽中使用自定義型別
qt的訊號和槽機制由於實現的年代比較久遠,所以採用的是 預編譯而不是更時髦的模板技術來實現。但實際使用起來還是挺方便的。也能夠很好地用於跨執行緒的通訊場景,比如後台執行緒取到資料後通知ui執行緒顯示。最近遇到乙個有趣的問題 我們在乙個訊號中用了自定義型別,之前使用完全沒有問題。後來我們改到非ui執行...