QT父類訊號呼叫子類槽函式

2022-06-02 20:22:33 字數 1669 閱讀 1778

故事背景:我定義了乙個qt父類,裡面有自定義訊號和槽函式,我在main函式定義父類指標指向子類物件,此時發訊號,子類收不到,開始咱們的探險之路。。。

解決方案:根據加斷點發現呼叫的是父類的訊號,但是訊號槽是在子類建構函式做的關聯;此時把connect放在父類就可以了(這只是一種解決方案);另一種是在網上檢視了父類呼叫子類方法dynamic_cast,下面用**解釋下我的兩種解決方案

**有話說:

一、先看下父類和子類的標頭檔案

#ifndef myparent_h

#define myparent_h#include

class myparent : public

qobject

;class mychild : public

myparent

;#endif

//myparent_h

第一種解決方案,connect放在父類建構函式:

#include "

myparent.h

"#include

myparent::myparent(qobject *parent) : qobject(parent)

void

myparent::slot_test()

mychild::mychild(myparent *parent) : myparent(parent)

void

mychild::connect_slot()

void

mychild::slot_test()

//呼叫方法

mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(new ui::mainwindow)

此時列印:this is child

第二種解決方案,使用dynamic_cast轉換為子類物件,然後把connect放在子類的建構函式中

#include "

myparent.h

"#include

myparent::myparent(qobject *parent) : qobject(parent)

void

myparent::slot_test()

mychild::mychild(myparent *parent) : myparent(parent)

void

mychild::connect_slot()

void

mychild::slot_test()

//呼叫方法

mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(new ui::mainwindow)

question:qt訊號不能實現多型嗎?同名訊號(父類的訊號子類是否繼承了)?因為根據我這個解決方案還是有點疑惑。。。還請大佬解答。

QT BUG 子類槽函式報錯顯示父類無此槽函式

在父類的標頭檔案中,繼承了qwidget class parentsclass public qwidget 在子類的標頭檔案中,繼承了父類parentsclass class subclass public bug報錯 父類中沒有 testbuttonclick 這個槽函式函式 解決方法 步驟1 ...

QT訊號槽connect函式

使用qt開發時,通常使用connect函式只傳遞四個引數 connect sender,signal signal receiver,slot slot 所以我們有可能認為該函式就只有四個引數,但實際上是有第五個引數的,只是通常該函式已經給第五個引數賦值了而已,我們所使用的是預設值 sender和r...

子類繼承父類的虛函式呼叫

父類 father 子類 son 1.father fa new son 例項1 includeusing namespace std class father void watchtv virtual void say class son public father void watchtv vo...