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);
}
我在我的插槽中放置一个断点,但它从未达到断点。
答
您应该检查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 –
你的意思是使用'clicked()'而不是'released()'? – Mike
@Mike释放也应该被调用,虽然我猜你当你点击按钮。 – Hayt
你声明你的插槽是错误的:不是'void Calculator :: two();'但是'void two();' – Hayt