Qt设计师Q PaintError

时间:2013-06-29 23:17:17

标签: c++ qt qt4

我遇到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();
 }

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

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

2 个答案:

答案 0 :(得分:2)

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

您正在主要调用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之前)初始化,因此您的问题。

答案 1 :(得分:0)

创建指针或智能指针,并在MainWindow之后初始化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();
 }