Seite 1 von 1

must construct a qapplication before a qpaintdevice

Verfasst: 10. August 2008 18:38
von otternase
Hallo

ich bekomme die im Betreff genannte Fehlermeldung, wenn ich folgendes simples Programm unter Windows ausführe (unter Linux funktioniert es problemfrei):

Code: Alles auswählen

#include <QApplication>
#include <QFile>
#include <QWidget>
#include <QSvgWidget>
#include <QDebug>
#include <QFileDialog>

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

     QString fileName = QFileDialog::getOpenFileName(0, "Datei oeffnen", "c:/Temp", "SVG Files (*.svg)");
     QSvgWidget *svgwidget=new QSvgWidget;
     svgwidget->load(fileName);
     svgwidget->show();
     
     return app.exec();
 }
Das Programm bricht nach dem Filedialog ab.
Wie kommt die Fehlermeldung zustande? Zu dem Zeitpunkt, zu dem svgwidget angelegt wird, ist app doch schon längst vorhanden?

Vielen Dank
Markus

Verfasst: 13. August 2008 16:21
von pluto
Hallo.

Ich hatte die gleichen Probleme. Bei mir wurden diese durch das Zusammenbauen von nicht kompatiblen Bibliotheken verursacht. Man kann nicht DLLs mit Debuginfos und DLLs ohne Debuginfos in einer Anwendung verwenden.

Ich hatte mir notiert:
"Obwohl die Kombination von CMake, C++ und Qt4 eine gute Grundlage für
Multiplattformanwendungen bietet, sind dennoch einige Probleme beim Erzeugen der Anwendung, vor allem unter Windows, aufgetreten. Diese Probleme traten weniger beim Compilieren, sondern vor allem beim Linken der
Anwendung, auf. Zur Lösung dieser Probleme mussten unter anderem etliche Linker­ und Compileroptionen in den CMake­-Skripten angepasst werden. Da die Anwendung einige Bibliotheken benutzt, erhöht sich die Zahl der Fehlerquellen. Ist die Bibliothek Qwt zum Beispiel im Release­Modus und die Monitoranwendung im Debug­Modus erzeugt worden, startet die Anwendung zwar, bricht später jedoch mit einer Fehlermeldung ab, welche keine direkten Rückschlüsse auf die Fehlerursache zulässt."

Man muss auch aufpassen das die QT und die MSVC*-DLLs zusammenpassen. Versuche erstmal alle DLLs im Debugmodus zu verwenden.

Gruß