// mainwindow.h
#include "ui_MainWindow.h"
#include "parseTextFile.h"
class MainWindow:public QMainWindow
{
Q_OBJECT
public:
MainWindow(void);
private:
Ui_mainWindow ui;
parseFile *fileParse;
public slots:
int onOkButtonClick();
};// mainwindow.cpp
MainWindow::MainWindow(void)
{
ui.setupUi(this);
connect(ui.OkButton,SIGNAL(clicked()),this,SLOT(onOkButtonClick()));
}
int MainWindow::onOkButtonClick()
{
fileParse = new parseFile(this);
fileParse->parseTextFile();
return 0;
}
int main(int argc,char* argv[])
{
QApplication app(argc,argv);
MainWindow *mainWindow = new MainWindow();
mainWindow->show();
return app.exec();
}// parseTextFile.h
class parseFile
{
public:
parseFile(QWidget *parent =0);
~parseFile();
int parseTextFile( );
};// parseTextFile.cpp
#include "parseTextFile.h"
#include <QMessageBox>
parseFile::parseFile(QWidget *parent)
{
}
parseFile::~parseFile()
{
}
int parseFile::parseTextFile( )
{
QMessageBox::information(this,"a","b");
return 0;
}我可以访问parseTextFile方法,但在QMessageBox中遇到错误。这条路对吗?如何在parseTextFile类中打印QMessageBox?需要在parseTextFile构造函数中添加什么吗?
发布于 2021-11-18 09:26:10
将this作为父级传递给QMessageBox::information不是有效参数,因为parseFile不是QWidget派生类。
为了简单起见,只需传递nullptr而不是this:
QMessageBox::information(nullptr ,"a","b");在这种情况下,消息框不属于任何人。它将被用户关闭,或者在应用程序退出时关闭。
PS:您应该在使用fileParse之后释放内存,以避免内存泄漏。
有几种方式可以喜欢主窗口(静态指针、单例、顶级窗口小部件枚举等)但最简单的,我认为您打算这样做,就是将parseFile类作为QObject派生类,并将QMainWindow作为其父类。
class parseFile: public QObject
{
Q_OBJECT
public:
parseFile(QWidget *parent =0);
~parseFile();
int parseTextFile();
};
parseFile::parseFile(QWidget *parent)
:QObject(parent)
{
}
int parseFile::parseTextFile()
{
QWidget * parentWidget = qobject_cast<QWidget *>( parent() ); //<-- QMainWindow instance
QMessageBox::information( parentWidget, "a", "b");
return 0;
}
int MainWindow::onOkButtonClick()
{
fileParse = new parseFile(this);
fileParse->parseTextFile( );
//fileParse should be released by:
//fileParse->deleteLater();
return 0;
}https://stackoverflow.com/questions/70014817
复制相似问题