如何从其他类访问QMainWindow并在自定义类中正常显示QMessageBox
问题根因
你的实现逻辑存在错误,运行报错的核心原因有两个:
QMessageBox::information()静态方法的第一个入参要求是QWidget*类型的父窗口指针,你传入的this是parseFile类的实例,该类既没有继承QWidget,也没有存储你构造时传入的父窗口指针,类型不匹配直接触发报错。- 你在
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
相关产品推荐
相关产品推荐

