QT点击事件内首次出现异常访问违规写入位置

first-chance exception access violation writing location inside QT clicked event

本文关键字:访问 异常 位置 事件 QT      更新时间:2023-10-16

我有两个版本的相同应用程序,在使用图形UI和QT的版本中,我有一个运行时错误:

first-chance exception  access violation writing location 

参考

this->secondi_totali = someint;

在模型方法内部启动。我的模型类是:

class Model {
public:
friend class Controller; //dico che controller può accedere alle cose private
//friend class cronometro_qt;

/*costruttore*/
Model();

void set(int,int,int);
int get_secondi();
int get_minuti();
int get_ore();
void tick();

private:
int secondi_totali;
int secondi_trascorsi;
int secondi;
int minuti;
int ore;
};

导致异常的方法是:

void crono::Model::set(int ore, int minuti, int secondi) {
this->secondi_totali =  ore * 3600 + 60 * minuti + secondi;
this->secondi_trascorsi = 0;
 }

并且在堆栈中是从这个方法调用的:

void crono::Controller::set(int ore, int minuti, int secondi) {
this->modello->set(ore, minuti, secondi);
}

这个->modello显然是一个指向Controller项中Model对象的指针。

正如我之前所说,我已经完成了两个版本的程序。

在第一种情况下,控制器的set()方法由视图的一个简单方法调用,该方法是一个空类。

在第二个版本中,控制器的set()方法由调用

void crono::cronometro_qt::on_pushButton_clicked() { /* ... */ }

方法。

显然,在这两个版本中,空视图或cronometro_qt(QMainWindow的子类)都有一个指向控制器的指针,以便调用如下的set()方法:

this->controller->set(ore,minuti, secondi);

那么为什么QT版本会抛出这个异常呢?

在初始化变量之前,先输入应用程序的事件循环(a.exec())。exec()在应用程序退出之前不会返回。将初始化移动到a.exec()上方。