我在从子程序创建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();
}
如何正确执行此操作?
最佳答案
从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
可以确保在关闭窗口时将其删除,从而避免内存泄漏。关于c++ - QT QMainWindow来自子程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38805798/