Qt最近开始崩溃而没有理由。由于以编程方式启动另一种形式,目前正在将我的神经紧张到纸浆的最新产品正在崩溃。 “必须在QWidget之前构建QApplication”显然是Qt 5.7。*版本的常见问题,而我在StackOverflow中找到的解决方案对我没有帮助。
以下是我删除的代码,它允许我重新启动应用程序而没有任何明显的问题:
#include "operations.h"
Operations o;
void mainWindow::on_thisButton_clicked()
{
o.show();
this->hide();
}
main.cpp按要求:)
#include "mainWindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
mainWindow w;
w.show();
return a.exec();
}
答案 0 :(得分:3)
试试这个:
#include "operations.h"
void mainWindow::on_thisButton_clicked()
{
Operations *o = new Operations();
o->show();
this->hide();
}
您可能希望将Operations *o
声明为mainWindow
的成员,并在每次点击该按钮时不想创建新的构建器时将其初始化。
答案 1 :(得分:1)
不要将Operations对象创建为全局变量,因为它将作为运行main()的静态BEFORE创建,因此错误消息只是正确且相关。这是一个C ++问题,而不是Qt问题。 所有其他建议都有效,因为您现在可以在QApplication ...
之后的适当时间创建对象答案 2 :(得分:0)
好吧,我已经设法找到了一个解决方案,然而,这是一种愚蠢的边缘,因为它没有任何意义,因为它不能在之前的状态下工作。从技术上讲,为了使错误不出现,你需要做的就是在函数本身中粘贴你所引用的表单类的声明(即Operations o;
)。
这是代码解决方案本身:
#include "operations.h"
void mainWindow::on_thisButton_clicked()
{
Operations o;
o.show();
this->hide();
}
请记住,这不是所有问题的结束,因为我现在遇到新表单在打开的同一个1秒内关闭的问题。如果我设法解决它,我将更新我的解决方案。
答案 3 :(得分:0)
“必须在QWidget之前构造QApplication”是Qt应用程序遇到的标准错误类型,当链接不兼容的东西时(如混合调试/发布)。
因此,在大多数用例中,这表示构建问题,并且与代码本身无关。