我遇到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();
}
所以,我不知道为什么会出现这个错误。
如果有人帮助我,我将不胜感激。
答案 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();
}