【问题标题】:SIGNAL SLOT in QTQT中的信号槽
【发布时间】:2017-02-23 18:42:03
【问题描述】:

我在VS2013中写了一个简单的QT计算器。我使用信号released() 来调用我的插槽,但我的插槽不起作用。也许我的信号从未触发。我是 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);
}

我在插槽中设置了一个断点,但它从未命中断点。

【问题讨论】:

  • 您是不是要使用clicked() 而不是released()
  • @Mike release 也应该被调用,虽然我猜当你点击按钮时。
  • 你声明你的槽错误:不是void Calculator::two();,而是void two();
  • one_button = new QPushButton("2",this);connect(two_button,SIGNAL(re... 处的错字?

标签: c++ qt signals slot


【解决方案1】:

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

这并不重要。

【讨论】:

  • 啊,我刚开始写一个答案来提到新语法;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 2021-02-12
相关资源
最近更新 更多