2012-02-22 66 views

回答

1

它看起來效率很低,但您可以用連接到按鈕的QString參數創建一個新信號。包含的文本將在您的發出呼叫中定義。

例如。

connect(yes, SIGNAL(clicked()), this, SLOT(emitHelloWorldText()); 
connect(this, SIGNAL(emitText(QString)), receiver, SLOT(dostuffWithText(QString))); 

那麼你emitHelloWorldText方法可以是這樣的

void emitHelloWorldText() { 
    emit emitText("Hello world"); 
} 

那麼這可以通過你的接收機類

void doStuffWithText(const QString &text) { 
+0

這太可怕了。下一步是'emitHelloWorld'實際上從GUI元素獲取一些文本。 – pmr 2012-02-23 00:17:05

0

不幸的是,插槽和信號必須有匹配的參數。如果你確實需要堅持使用這個接口,你可以創建一箇中間插槽來傳播接收到的信號,但是沒有真正的方法。

2

經常忽略的一個辦法扭轉信號被拾起/插槽關係是。您可以在接收槽中調用它以獲取QPushButton(使用qobject_cast)的句柄並從那裏獲取文本。或者,您可以使用QSignalMapper來增強信號。

+0

儘管使用sender()永遠不是一個乾淨的解決方案,因爲它通過假設插槽中的某個發件人來打破解耦。 – 2012-02-23 09:09:55

+0

@FrankOsterfeld因此,通過中介轉發插槽。就在另一個地方。 Qt信號和插槽機制只要您離開預定路徑就有點弱。 – pmr 2012-02-23 10:21:37

相關問題