来自子程序的QT QMainWindow

时间:2016-08-06 15:20:45

标签: c++ qt qmainwindow

从子程序创建QMainWindow对象时遇到问题。我需要根据用户的要求创建不同数量的窗口。

问题在于,如果我从子程序创建它,它将被创建为局部变量,并且仅显示一瞬间。通常我需要返回一个指针,但我没有设法用这个对象。这是代码:

#include <QApplication>
#include <QMainWindow>

QMainWindow runGUI(){
    QMainWindow window;
    window.show();
    window.resize(340,260);
    return window;
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    /*
    QMainWindow window;
    window.show();
    window.resize(340,260);
    */
    runGUI();
    return app.exec();
}

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:5)

从runGUI()返回QMainWindow调用复制构造函数:Qt对象不是为了复制而设计的。你应该确实返回一个指针,并动态分配窗口:

#include <QApplication>
#include <QMainWindow>

QMainWindow* runGUI(){
    QMainWindow* window = new QMainWindow;
    window->setAttribute(Qt::WA_DeleteOnClose);
    window->show();
    window->resize(340,260);
    return window;
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QMainWindow* window = runGUI();
    return app.exec();
}

请注意使用Qt::WA_DeleteOnClose来确保窗口在关闭时将被删除,从而避免内存泄漏。