You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从其他类访问QMainWindow并在自定义类中正常显示QMessageBox

问题根因

你的实现逻辑存在错误,运行报错的核心原因有两个:

  1. QMessageBox::information() 静态方法的第一个入参要求是 QWidget* 类型的父窗口指针,你传入的this是parseFile类的实例,该类既没有继承QWidget,也没有存储你构造时传入的父窗口指针,类型不匹配直接触发报错。
  2. 你在parseFile构造函数中已经接收了QWidget* parent参数,但没有做持久化存储,调用弹窗时无法获取到合法的父窗口对象。

修复方案

1. 修改parseTextFile.h头文件

新增私有成员变量存储父窗口指针,补充必要头文件引用:

#include <QWidget> // 新增QWidget头文件

class parseFile
{
public:
    parseFile(QWidget *parent = 0);
    ~parseFile();

    int parseTextFile( );
private:
    QWidget* m_parent; // 新增存储父窗口的成员变量
};

2. 修改parseTextFile.cpp实现文件

构造函数中初始化成员变量保存传入的父窗口,调用弹窗时替换入参:

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

// 构造函数通过初始化列表给成员变量赋值
parseFile::parseFile(QWidget *parent)
    : m_parent(parent)
{
}

parseFile::~parseFile()
{
}

int parseFile::parseTextFile( )
{
    // 将原来的this替换为存储的父窗口指针即可
    QMessageBox::information(m_parent,"a","b");
    return 0;
}

可选优化

如果你的parseFile类后续需要用到信号槽、Qt事件系统等能力,可以直接让它继承QObject或QWidget基类;如果仅需要实现弹窗功能,上述修改已经完全满足需求。

内容的提问来源于stack exchange,提问作者Mani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:06:01