簡體   English   中英

Qt問題將參數傳遞給slot

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM