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

QWidget を作成する前に、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);

他の Qobject の前に来なければなりません。あなたが与えたコードでは、グローバルオブジェクトはメインの前に(そしてQApplicationを構築する前に)初期化されるため、問題があります。

于 2013-06-29T23:25:29.207 に答える
0

ポインターまたはスマート ポインターを作成し、MainWindowafterのインスタンスを初期化します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 に答える