QObject::connect
採用參數如下:QObject :: connect類型的Func2參數?
connect(const QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
const QtPrivate::FunctionPointer<Func2>::Object *receiver, Func2 slot);
現在讓我們說我創建一個方法QPushButton *newPushButton(const QString &text, Func2 slot);
,我怎麼使用Func2
作爲參數的類型,我必須包括什麼?
下面是我想如何我newPushButton
看起來像一個例子:
QPushButton *MyWidget::newPushButton(const QString &text, Func2 slot)
{
QPushButton *pushButton = new QPushButton(text);
layout->addWidget(pushButton);
QObject::connect(pushButton, &QPushButton::clicked,
this, slot);
return pushButton;
}
現在我可以把它像這樣:
MyWidget::MyWidget(QWidget *parent = 0) : QWidget(parent)
{
layout = new QVBoxLayout;
myButton1 = newPushButton("My Button One", &MyWidget::on_myButton1_clicked);
myButton2 = newPushButton("My Button Two", &MyWidget::on_myButton2_clicked);
setLayout(layout);
}
不過,我似乎無法弄清楚如何在不使用模板的情況下將&MyWidget::slot
作爲參數傳遞給newPushButton()
方法(connect()
如何做?)。
layout
和myButton
都是MyWidget
的成員。
哦......我現在覺得很無聊。我怎樣才能調用'connect(...)'而不是'connect(...)'? –
由於函數的模板參數可能被編譯器扣除(在這種情況下它們是這樣的),請參閱[C++ 11標準](http://isocpp.org/std/the-standard)的第14.2.2.1節, 。如果你仔細想想,你會寫'qMax(5,12)',而不是'qMax(5,12)';你編寫'std :: sort(v.begin(),v.end())',而不是'std :: sort (v.begin(),v.end())'等 –
peppe
太棒了,我怎麼會不知道...是隻在C++ 11中,因爲我以前從未使用C++ 11,只有98版本? :P –