[英]Qt issue passing arguments to slot
我似乎無法將一個參數傳遞給一個插槽。 如果我沒有傳遞一個參數,那么函數會很好地通過。 如果我傳遞一個參數(整數),我編譯時會得到錯誤“沒有這樣的名字類型”和“沒有這樣的插槽”。
在我的標題中,我聲明:
private slots:
void addButton(int);
signals:
void clicked(int)
在我的Main.cpp中,我這樣做:
int count;
int count = 0;
QPushButton* button = new QPushButton("Button");
_layout->addWidget(button);
connect(button, SIGNAL(clicked(count), this, SLOT(addButton(count)));
....
void Main::addButton(int count) {
//do stuff with count
}
塞巴斯蒂安是正確的,你不能以你正在嘗試的方式做到這一點,但是Qt確實提供了一個為你提供所需功能的類。
查看QSignalMapper 。 它允許您將整數與對象/信號對相關聯。 然后連接到其信號而不是直接連接到按鈕。
信號和插槽必須具有相同數量和類型的參數,並且您只能將信號的參數傳遞給插槽,而不是您想要的任何變量或值。
我可以看到三個問題。
首先, clicked()
信號由QPushButton
發出(沒有參數),但是你試圖在你自己的類中重新定義它(使用int
參數)。 如果你想這樣做:
SignalClass* objectWithSignals = new SignalClass;
SlotClass* objectWithSlots = new SlotClass;
connect(objectWithSignals, SIGNAL(a()), objectWithSlots, SLOT(b()));
那么你只能連接SignalClass
已定義的信號。 換句話說,信號a()
必須屬於SignalClass
,而不是SlotClass
。
(實際上, clicked()
是在QPushButton
的基類QAbstractButton
定義的。)
其次,在connect()
函數中,您需要使用其參數類型指定信號和插槽簽名。 你在connect()
函數中有count
的地方,它應該是int
。
第三,你的連接調用中缺少一個括號: SIGNAL(clicked(count))
。
希望有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.