我正在学习如何在视觉工作室中使用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时,它不会调用我的方法。这有什么问题?
答案 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()));