2016-10-14 198 views
1

我在VS2013中編寫了一個簡單的QT計算器。我用信號released()來撥打我的插槽,但我的插槽不工作。也許我的信號從未觸發。我是QT新手,我不知道我做錯了什麼。QT中的信號插槽

我班有此屬性:

class Calculator : public QMainWindow 
{ 
Q_OBJECT 

public: 
    Calculator(QWidget *parent = 0); 
    ~Calculator(); 

private slots: 
    void Calculator::two(); 
private: 
    QLabel *lable; 
    QPushButton *two_button; 
    QString value; 
    QString total; 
    int fnum; 
    int snum; 
    bool addbool; 
    bool subtractbool; 
    bool multiplybool; 
    bool devidebool; 
}; 

這是我的信號連接到插槽的代碼行:

one_button = new QPushButton("2", this); 

connect(two_button, SIGNAL(released()), this, SLOT(two())); 

和我的插槽

void Calculator::two() 
{ 
    value = value+"2"; 
    lable->setText(value); 
} 

我在我的插槽中放置一個斷點,但它從未達到斷點。

+0

你的意思是使用'clicked()'而不是'released()'? – Mike

+0

@Mike釋放也應該被調用,雖然我猜你當你點擊按鈕。 – Hayt

+2

你聲明你的插槽是錯誤的:不是'void Calculator :: two();'但是'void two();' – Hayt

回答

7

您應該檢查connect函數的結果。你插槽需要定義你把它提供給connect,如果你使用的是舊版的信號/槽語法以同樣的方式,所以

// this seems to be a non-standard extension of MSVC 
// doesn't even compile under gcc, clang 
void Calculator::two(); 

應該成爲

void two(); 

但是,你應該使用引進的語法與Qt 5:

connect(two_button, &QPushButton::released, this, &Calculator::two); 

它並不重要。

+1

啊,我剛剛開始寫一個提及新語法的答案;) – Hayt

+0

謝謝我下次會做得更好:D –