QT中的信号插槽

问题描述:

我在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

您应该检查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 –