来自子程序的 QT QMainWindow

QT QMainWindow from subroutine

我在从子例程创建 QMainWindow 对象时遇到问题。我需要这个来根据用户的请求创建不同数量的 windows。

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

#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();
}

如何正确执行此操作?

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

#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 的使用,确保 window 在关闭时被删除,避免内存泄漏。