来自子程序的 QT QMainWindow
Posted
技术标签:
【中文标题】来自子程序的 QT QMainWindow【英文标题】:QT QMainWindow from subroutine 【发布时间】:2016-08-06 15:20:44 【问题描述】:我在从子例程创建 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();
我该如何正确地做到这一点?
【问题讨论】:
“通常我需要返回一个指针,但我没有设法用这个对象做到这一点”你能展示一下你到目前为止所做的尝试吗?跨度> 另外,在您的main
中,您没有使用返回的runGUI()
,因此它在app.exec()
之前被销毁
你能详细说明一下“我需要这个来根据用户的请求创建不同数量的窗口”你需要不同数量的主窗口吗?
@mvidelgauz runGUI() 例程无法编译(它说错误:'QMainWindow::QMainWindow(const QMainWindow&)' is private)。我尝试将*runGUI();
与return &window;
并调用QMainWindow *window = runGUI();
我也尝试更改为 void 例程,该例程可以编译,但随后窗口瞬间消失。
【参考方案1】:
从 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
的使用,保证窗口关闭时会被删除,避免内存泄漏。
【讨论】:
实际上对于这段代码,返回指针是不必要的(并且应该有一个编译器警告关于 main 中未使用的变量“window”)。 对于这段代码,你是对的。但是在 OP 的用例中返回指针是必要的,尽管这个用例并没有真正显示在它的示例和我如此派生的答案中以上是关于来自子程序的 QT QMainWindow的主要内容,如果未能解决你的问题,请参考以下文章
启动使用来自 QT Gui 应用程序的环境变量的控制台应用程序
怎么用Qt的TableView来显示数据,数据有些来自MySQL的表中(多张不同的表),并且有些数据并不是从MySQL取