2015-11-02 39 views
1

我有一個函數,我試圖通過信號和插槽連接,但是當我運行可執行文件時函數沒有被調用。我在我的函數中加入了一個調試錯誤,所以我知道它沒有被調用。我的代碼如下所示:QObject信號和插槽沒有訪問功能

我的頭文件:

#include "MyWidget.h" 
#ifndef MYCLASS_H 
#define MYCLASS_H 

class MyClass: public QObject{ 

    Q_OBJECT 
    public: 
    MyClass(QObject *parent = nullptr); 
    MyWidget *myWidget; 

    public slots: 
    void setTranslation(int value); 
}; 

#endif 

我的源文件:

#include "MyClass.h" 

MyClass::MyClass(QObject *parent): QObject(parent) 
{ 
    some code here.... 

    QSlider *xSlider = new QSlider(Qt::Vertical); 
    xSlider->setRange(0, 10); 

    QObject::connect(xSlider, SIGNAL(valueChanged(int)), 
       this, SLOT(setTranslation(int))); 

    some code here... 
} 

void MyClass::setTranslation(int value) 
{ 
    some code here... 
} 

回答

2

你忘了在類聲明後,立即添加Q_OBJECT宏。這是moc編譯器用於爲您的代碼生成額外元信息的內容。

class MyClass: public QObject 
{ 
    Q_OBJECT 
    // all other class data, member function declaration 
public: 
    MyClass(QObject *parent = nullptr); 
}; 

這應該夠用了。

編輯:還記得在默認ctor中採用nullptr默認的QObject指針。

+0

即使添加Q_OBJECT到我的文件後,它仍然配備了相同的錯誤,但現在它說: 的QObject ::連接:沒有這樣的插槽MyClass的:: setTranslation(int值),而不是 – Jade

+0

請看看我的編輯也許你們需要重建你的代碼。 – iamOgunyinka

+0

@Jade你需要在類定義的最頂部插入'Q_OBJECT'。所有其他線路保持不變。順便說一句,這裏的相關文件:http://doc.qt.io/qt-5/signalsandslots.html#a-small-example – trooper