调用connect时的问题会给我一个错误

Qt when calling connect gives me an error

本文关键字:错误 一个 connect 问题 调用      更新时间:2023-10-16

我的连接有问题。我的问题是:我有一个名为eventos(events)的类,它将管理所有对象事件(按钮、列表等),但当我调用一个事件时,它会给我一个内存读取错误。这是我的代码:

我的主要课程:

#include "ratagbc.h"
#include "eventos.h"
RataGBC::RataGBC(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    eventos e;
    connect(ui.runBtn,SIGNAL(clicked()),this,SLOT(e.on_runBtn_clicked()));
    ui.setupUi(this);
}
RataGBC::~RataGBC()
{
}

eventos.h:

#include QDialog.h
#include "ui_ratagbc.h"
class eventos : public QDialog, public Ui::RataGBCClass { 
    Q_OBJECT    
public:     
        eventos(void);
    ~eventos(void);
    public slots:       void on_runBtn_clicked(); };

eventos.cpp:

#include "eventos.h"
#include <QMessageBox>

eventos::eventos(void)
{
}

eventos::~eventos(void)
{
}
void eventos::on_runBtn_clicked()
{
    QMessageBox qb;
    qb.setText("Rata");
    qb.exec();
}

错误为:

RataGBC.exe中0x776a15de处未处理的异常:0xC0000005:读取位置0x00000964时发生访问冲突。

调试时我意识到(或猜测?)错误似乎在SINGAL调用中。

对象eventos e的作用域和生存期受到构造函数主体的限制。您应该成为RataGBC的成员;或者从QObject继承它(我看不到eventos.h,但我相信您已经继承了它,只要您使用信号槽机制),并将其动态创建为RataGBC的子级,就像这个一样

eventos * e = new eventos();
e->setParent(this);

或者不使其成为子级,而只是在RataGBC 的析构函数中删除它

您的连接方法是..

connect(ui.runBtn,SIGNAL(clicked()),this,SLOT(e.on_runBtn_clicked()));

则对于该信号qt将在RataGBC类中搜索不具有任何这样的槽的槽。为了避免这种情况,u应该将当前接收器对象替换为eventos对象,如下所示。。

connect(ui.runBtn,SIGNAL(clicked()),e,SLOT(e.on_runBtn_clicked()));

这对你有用。。

尝试以下代码,您的eventos e,对象的作用域仅限于构造函数,其次您将其用作slot的目标对象,但您希望e成为目标。此外,您应该使e成为类成员变量,并在析构函数中删除它。

eventos *e = new eventos();
connect(ui.runBtn,SIGNAL(clicked()),e,SLOT(on_runBtn_clicked()));
ui.setupUi(this);
相关文章: