2

我在使用 Qt4 时遇到问题。

我的 Qt

Qt Creator 2.3.1 

Based on Qt 4.7.4 (32 bit)

2 天前,我安装了 Qt 设计器和 Opencv,它们运行良好,除了一个奇怪的错误。

这个错误说,

QWidget: Must construct a QApplication before a QPaintDevice

当我在我的 main.cpp 文件中清除任何类时,就会发生这个奇怪的错误。例如,

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <iostream>

using namespace std;

MainWindow ana_pencere; // If I dont decleare, error dissappers.

 int main(int argc, char *argv[])
 {
   QApplication a(argc, argv);
   MainWindow w;
   w.show();
 /** @function main */

  return a.exec();
 }

所以,我不知道为什么会发生这个错误。

如果有人帮助我,我将不胜感激。

4

2 回答 2

2

在创建任何 QWidgets 之前,您必须构建 QApplication。

在main 调用 QApplication之前,您正在创建一个全局对象 MainWindow 。

您可以通过使其具有一个指向对象的全局指针来解决此问题,然后稍后将其分配,如下所示:

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <iostream>

using namespace std;

MainWindow* ana_pencere_ptr; 
//Pointer to an object. Doesn't initialize an object.

 int main(int argc, char *argv[])
 {
   QApplication a(argc, argv);
   MainWindow w;
   ana_pencere_ptr = &w;
   w.show();

 /** @function main */

  return a.exec();
 }

基本上,这条线

QApplication a(argc, argv);

必须在其他 Qobjects 之前。在您提供的代码中,全局对象在 main 之前(以及在您构造 QApplication 之前)被初始化,因此您的问题。

于 2013-06-29T23:25:29.207 回答
0

MainWindow创建一个指针或智能指针并初始化after的实例QApplication

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <iostream>

using namespace std;

//only declare a pointer, no object is being created so far
boost::shared_ptr<MainWindow> ana_pencere_ptr; 

 int main(int argc, char *argv[])
 {
   QApplication a(argc, argv);

   ana_pencere_ptr.reset(new MainWindow);
   ana_pencere_ptr->show();

 /** @function main */

  return a.exec();
 }
于 2013-06-29T23:52:06.060 回答