在Qt中,信號和槽需要匹配參數類型:我們如何用不同的參數連接信號和插槽?
的QObject ::連接:不相容發送/接收器參數QLabel ::的linkActivated(QString的) - >按鈕::呼叫(INT)
我該如何實現這樣的組合?
在Qt中,信號和槽需要匹配參數類型:我們如何用不同的參數連接信號和插槽?
的QObject ::連接:不相容發送/接收器參數QLabel ::的linkActivated(QString的) - >按鈕::呼叫(INT)
我該如何實現這樣的組合?
一個簡單的方法是有一箇中間插槽調用您想要的插槽。例如
connect(src, SIGNAL(linkActivated(QString)), this, SLOT(receiveLink(QString)));
然後
void receiveLink(QString blah)
{
int response = someFunction(blah);
mybutton->call(response);
}
你必須定義一些方法來解釋字符串轉換成int類型。
的信號的簽名必須接收 槽的簽名相匹配。 (事實上一個時隙可以具有比它 接收,因爲它可以忽略額外的參數的信號中的較短的簽名。)
這意味着形式
signal(int, int, QString
)
的信號只能與狹槽連接的具有以下簽名
slot1(int, int, QString)
slot2(int, int)
slot3(int)
slot4()
作爲公案表明最好的辦法是使用另一個時隙用的QString argume nt然後調用你實際需要的插槽。
將有可能創造了'src'對象的類,在他們所需要的功能呢? – chwi
插槽參數的默認值非常有幫助。這允許以不同的簽名信號連接到槽(反之亦然@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 &)));
確定我會嘗試, – user896036