CÃlimos 2023-12-27 15:08 采纳率: 64.4%
浏览 265
已结题

qt报错 Debugger encountered an exception: Exception at 0x7661f01bd, code: 0xc0000005:

我在一个activate类中调用了mainwindow的ui,然后再activate.cpp里不管写什么ui函数,编译完成后都报错

error: Debugger encountered an exception: Exception at 0x7ff661f01fbd, code: 0xc0000005: read access violation at: 0x1b0, flags=0x0 (first chance) 

我感觉是调用时的问题,其中mainwindow.h里是

public:
    mainwindow(QWidget *parent = nullptr);
    ~mainwindow();

   Ui::mainwindow *ui;

然后activate.h是

class mainwindow;
class activate: public QWidget
{

Q_OBJECT

public:
    explicit activate(QWidget *parent = nullptr);
    ~activate();

private:
 Ui::mainwindow *ui;

};

网上有类似报错帖子说在头文件里定义的某一指针变量,在使用它之前没有new一下,但我改成
Ui::mainwindow *ui = new Ui::mainwindow()也不行

  • 写回答

1条回答 默认 最新

  • 火花20180731 2023-12-27 18:20
    关注

    描述的有点乱。。。
    以我的理解,你并没有分清楚Ui::mainwindow和mainwindow这两个类
    首先你的mainwindow类包含三个文件:mainwindow.h mainwindow.cpp mainwindow.ui
    Qt 的uic.exe会读取你的mainwindow.ui文件,并生成一个Ui_mainwindow类,然后在名为Ui的命名空间下声明一个Ui_mainwindow的派生类,也就是Ui::mainwindow,这个类是uic.exe根据你的ui文件解析你界面的控件布局生成的界面布局类,它提供了一个setupUi接口,里面会按你ui文件创建控件,并通过你传入的父窗口指针中把它们布局到你的父窗口中。
    然后你自己又创建了一个名为mainwindow的父窗口类,这个类有一个成员是Ui::mainwindow *ui,这个类创建的时候,会自动生成一些代码,比如在你的构造函数中给ui指针new了一个Ui::mainwindow实例,并在构造函数一开始调用了setupUi函数,把mainwindow类的this指针当做父窗口指针传进去,于是就完成了在你自己的mainwindow类中创建控件和布局的过程。
    你现在想要在另一个界面类中操作mainwindow的控件,所以你把这个成员指针做成了public类型。
    那么你自己的这个mainwindow类的实例在哪呢?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 已采纳回答 12月27日
  • 修改了问题 12月27日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音