c++ - Qt 设计器 Q PaintError

标签 c++ qt qt4

我在使用 Qt4 时遇到问题。

我的Qt

Qt Creator 2.3.1 

Based on Qt 4.7.4 (32 bit)

2天前,我安装了Qt Designer和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();
 }

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

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

最佳答案

在创建任何 QWidget 之前,您必须构建 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);

必须位于其他 Qobject 之前。在您给出的代码中,全局对象在 main 之前(以及在构造 QApplication 之前)初始化,因此您的问题。

关于c++ - Qt 设计器 Q PaintError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17385556/

相关文章:

c++ - 使用 boost.python 时 c++ 流有什么问题?

c++ - 函数作为模板参数问题

c++ - 从 QUdpSocket 发送的数据包在 Wireshark 中看不到

c++ - Qt/嵌入式 : Caps Lock is not working

c++ - 非事件窗口中的 QMenuBar 项目样式

c++ - strstr - string.h 通讯错误错误?

c++ - 使用构造函数与大括号初始化列表来初始化类和结构的规则是什么?

c++ - 使用 2 个 channel 编写自定义 QIODevice

c++ - Windows 在不同线程中处理 CTRL+C?

pdf - 如何从 Qt 应用程序创建 pdf 文件?