故事背景:我定義了乙個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 "mainwindow::mainwindow(qwidget *parent) :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()
//呼叫方法
qmainwindow(parent),
ui(new ui::mainwindow)
此時列印:this is child
第二種解決方案,使用dynamic_cast轉換為子類物件,然後把connect放在子類的建構函式中
#include "mainwindow::mainwindow(qwidget *parent) :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()
//呼叫方法
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...