Qt信号插槽visual studio:似乎没有连接

时间:2017-03-15 16:05:02

标签: c++ visual-studio qt

我正在学习如何在视觉工作室中使用QT。目前,我正在使用QT 5.8和2017年。我创建了一个新项目并添加了一些带有QT设计器的radiobuttons。现在,我想实现一些动作,比如“单击radiobutton时执行此操作”。这是我的代码:

Draw.cpp

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_Draw.h"

class Draw: public QMainWindow
{
    Q_OBJECT

public:
    Draw(QWidget *parent = Q_NULLPTR);

private:
    Ui::DrawClass ui;

protected slots:
    void on_rdbMethod_change(bool, int);

};

Draw.h

@Autowired
private MongoOperations mongoOperations;

private final BasicDBObject basicDBObject = new BasicDBObject();

@PostConstruct
private void initialize() {
    basicDBObject.put("eval", "function() { return db.loadServerScripts(); }");
    mongoOperations.executeCommand(basicDBObject);
}

private void execute() {
    basicDBObject.put("eval", "function() { return echoFunction(3); }");
    CommandResult result = mongoOperations.executeCommand(basicDBObject);
}

如果我运行程序,我没有得到任何错误,如果我检查connect(...)行,我看到它被调用但是当我点击该radiobutton时,它不会调用我的方法。这有什么问题?

1 个答案:

答案 0 :(得分:2)

connect(this->ui.myradiobutton1, SIGNAL(clicked), this, SLOT(on_rdbMethod_change(this->ui.myradiobutton1->isChecked, 0)));

以上内容不正确 - 如果您查看程序的stdout输出,您可能会看到connect()正在打印有关它的错误消息。

特别是,单击后你没有包括括号,而且你的slot-methods参数必须与signal-method的参数相同,或者至少与前N个相同信号方法的论点。在这种情况下,由于信号(clicked())没有参数,这意味着你的slot-method也需要没有参数;所以你需要改变on_rdbMethod_change()不带参数,或者指定一个不同的槽方法(也许可以实现slot-method来调用on_rdbMethod_change(this-&gt; ui.myradiobutton1-&gt; isChecked ,0),如果这是你想要它做的事情)。另外,connect()调用不能在SIGNAL / slot参数列表中获取值,只能输入类型。

所以修正后的connect()调用看起来像这样:

connect(this->ui.myradiobutton1, SIGNAL(clicked()), this, SLOT(on_rdbMethod_change()));