首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个类访问QMainWindow

如何从另一个类访问QMainWindow
EN

Stack Overflow用户
提问于 2021-11-18 05:08:07
回答 1查看 27关注 0票数 0

// mainwindow.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
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

代码语言:javascript
复制
class parseFile
{
public:
    parseFile(QWidget *parent =0);
    ~parseFile();

    int parseTextFile( );
};

// parseTextFile.cpp

代码语言:javascript
复制
#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构造函数中添加什么吗?

EN

回答 1

Stack Overflow用户

发布于 2021-11-18 09:26:10

this作为父级传递给QMessageBox::information不是有效参数,因为parseFile不是QWidget派生类。

为了简单起见,只需传递nullptr而不是this

代码语言:javascript
复制
QMessageBox::information(nullptr ,"a","b");

在这种情况下,消息框不属于任何人。它将被用户关闭,或者在应用程序退出时关闭。

PS:您应该在使用fileParse之后释放内存,以避免内存泄漏。

有几种方式可以喜欢主窗口(静态指针、单例、顶级窗口小部件枚举等)但最简单的,我认为您打算这样做,就是将parseFile类作为QObject派生类,并将QMainWindow作为其父类。

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70014817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档