2011-10-29 77 views
2

爲什麼插槽Reset()不起作用?我想要按鈕「復位」將邊框的值重置爲零。Qt自定義插槽

class MySlider : public QSlider 
{ 
    public: 
    MySlider(Qt::Orientation orientation, QWidget *parent = 0) : QSlider(orientation parent){} 

    public slots: 
    void Reset() 
    { 
    this->setValue(0); 
    } 
}; 

//it doesnt work when i try this 

MySlider * Slider = new MySlider(Qt::Horizontal, this); 

QPushButton *Reset = new QPushButton(tr("Reset"), this); 

connect(Reset, SIGNAL(clicked()), Slider, SLOT(Reset())); 
+1

連接返回什麼?它應該返回true,如果插槽設置正確 –

+0

@MartinBeckett返回false –

回答

6

嘗試將Q_OBJECT添加到班級的私人部分。這將導致moc創建信號和插槽工作所需的元數據。請參閱http://doc.qt.io/archives/qt-4.7/qobject.html#Q_OBJECT

+0

我試過Q_GADGET(因爲我需要它是一個QSlider子類),它不工作 –

+2

哇,我沒有遇到Q_GADGET之前,我實際上去看看那個:) QSlider是一個QObject,所以你的QSlider的子類也是如此,所以使用Q_OBJECT。 –

+0

@ArnoldSpence當我在類的私有部分中嘗試QObject時,我得到了這個錯誤:未定義的引用''爲MySlider的vtable'。 –