2011-10-28 35 views

回答

15

一個簡單的方法是有一箇中間插槽調用您想要的插槽。例如

connect(src, SIGNAL(linkActivated(QString)), this, SLOT(receiveLink(QString))); 

然後

void receiveLink(QString blah) 
{ 
    int response = someFunction(blah); 
    mybutton->call(response); 
} 

你必須定義一些方法來解釋字符串轉換成int類型。

+0

確定我會嘗試, – user896036

33

signals slots documentation

的信號的簽名必須接收 槽的簽名相匹配。 (事實上​​一個時隙可以具有比它 接收,因爲它可以忽略額外的參數的信號中的較短的簽名。)

這意味着形式

signal(int, int, QString

的信號只能與狹槽連接的具有以下簽名

slot1(int, int, QString) 
slot2(int, int) 
slot3(int) 
slot4() 

作爲公案表明最好的辦法是使用另一個時隙用的QString argume nt然後調用你實際需要的插槽。

+0

將有可能創造了'src'對象的類,在他們所需要的功能呢? – chwi

2

插槽參數的默認值非常有幫助。這允許以不同的簽名信號連接到槽(反之亦然@pnezis回答):

private slots: 
    void slot(int x = 10, int y = 20, QString text = QString()); 

可以連接到不同的信號:

signal1(int, int, QString) 
signal2(int, int) 
signal3(int) 
signal4() 

另外的Qt 4.8建議有用QSignalMapper類:

該類收集一組無參數信號,並用integer,string或widg重新發射它們et參數對應於發送信號的對象。

但是,只有一個參數:

QSignalMapper* mapper = new QSignalMapper(this) ; 

connect(action, SIGNAL(triggered()), mapper, SLOT(map())) ; 
mapper->setMapping(action, "param value") ; 

connect(mapper, SIGNAL(mapped(const QString &)), 
    this, SIGNAL(clicked(const QString &)));