Seite 1 von 1

[gelöst] Qwt Installation

Verfasst: 20. März 2010 18:43
von Blubb
Hallo,

sitze jetzt hier schon seit Tagen rum und versuche Qwt 5.2.0 mit Qt 4.6 zum laufen zu bringen, allerdings will mir das einfach nicht gelingen.

Das Kompilieren von Qwt klappt auf meinem Rechner über Visual Studio 2008 CMD mit 'qmake qwt.pro' und anschließend 'nmake' schon mal nicht. Hier krieg ich an unterschiedlichen Stellen aber am häufigsten nach 'qwt_valuelist.h' einen Error (cl.exe und nmake.exe: Rückgabe-Code 0x2).

Habe mir die libs und dlls jetzt auf nem anderen Rechner kompiliert. Habe diese soweit überall eingefügt, wo diese benötigt werden (Qt lib und bin Ordner und bei den Projekteigenschaften unter 'Linker -> Eingabe') und auch die PATH-Variable entsprechend angepasst.
Wenn ich nun allerdings bspw. einen Qwt_Plot an irgendeiner Stelle im Programm erstelle, bekomme ich beim Starten der Applikation folgende Fehlermeldung:
"QWidget: Must construct a QApplication before a QPaintDevice"

Die QApplication wird allerdings in der ersten Zeile in der main() Funktion erstellt...

Wäre wirklich nett, wenn mir hier jemand weiterhelfen könnte, da ich für ein Projekt für die Berufsschule dringend Qwt brauche.


Grüße

Robert

Verfasst: 20. März 2010 19:12
von Christian81
Beispielcode bitte

Verfasst: 20. März 2010 19:20
von MiKla
Ich habe qwt schon sehr häufig kompiliert (static, shared), auch mit VS2008 und hatte nie Probleme. Die wichtigsten Einstellungen macht man in der qwtconfig.pri Datei. Dort stellt man auch ein, ob release/debug oder beides und shared oder static.

Dein Fehler in Deiner Applikation deutet darauf hin, das Du unterschiediche Versionen, debug/release, vermischst. Also Du Deine Applikation in Debug-Mode erstellst aber gegen die Release Version von qwt linkst!!! Dabei gibt es immer Probleme!!!

Michael

Verfasst: 20. März 2010 19:23
von franzf
Mit welchem Compiler sind deine Qt-Libs kompiliert? Auch mit VS2008? Oder hast du die aus dem fertigen Qt-sdk - AFAIK sind die mit MinGW kompiliert.

Re: Qwt Installation

Verfasst: 20. März 2010 19:38
von Uwe
sitze jetzt hier schon seit Tagen rum und versuche Qwt 5.2.0 mit Qt 4.6 zum laufen zu bringen, allerdings will mir das einfach nicht gelingen.
Kein Wunder - diese Kombination bekommen ein paar ältere Compiler aus dem MS Stall nicht gebacken. Du benötigst eine aktuelle Version von Qwt aus dem 5.2 SVN Bugfix Branch. ( Du benötigst dafür einen Subversion Client - das zugehörige Kommando findest Du auf der Qwt Homepage ).

Alternativ kannst Du die beanstandeten Deklarationen in qwt_valuelist.h auch einfach ersatzlos löschen.
Wenn ich nun allerdings bspw. einen Qwt_Plot an irgendeiner Stelle im Programm erstelle, bekomme ich beim Starten der Applikation folgende Fehlermeldung:
"QWidget: Must construct a QApplication before a QPaintDevice"
Das ist ein Symptom für eines dieser sinnlosen Build/Runtime Probleme die es unter vernünftigen Betriebssystemen gar nicht gibt. Irgendso ein Kram wie "Vergessen QWT_DLL zu definieren", Debug/Release Bibliotheken mischen oder irgendeine andere Inkompatibilität. Mit dem Code selber hat es in jedem Fall nichts zu tun.

Uwe

Verfasst: 20. März 2010 23:11
von Blubb
Habe mir die letzte Qwt Version per SVN geholt und damit scheint alles soweit zu klappen. Zumindest kommt nicht mehr diese Fehlermeldung, wenn ich einen Qwt_Plot erstelle.

Besten Dank, dann kann ich endlich mit meinem Projekt weitermachen :lol:

Verfasst: 24. März 2010 13:10
von martin2_86
Hi,

ich habe das gleiche Problem. Ich benutze QT Version 4.6.2 und QWT 5.2. Der Befehl "nmake" in der VS2008 Eingabeaufforderung angewandt auf den Installationspfad von QWT liefer fatale Error (cl.exe und nmake.exe: Rückgabe-Code 0x2). Daher hab ich mir TortoiseSVN runtergeladen und will das mit dem neuesten Bugfix nun probieren. Kannst du bitte posten, wie man das anstellt in TortoiseSVN? Was ich bisher geschafft hab ist den Repo browser zu öffnen und dann auf die URL zu gelangen die auf der QWT seite angegeben ist (https://qwt.svn.sourceforge.net/svnroot ... es/qwt-5.2). Dann erscheinen im browser als unterordner von branches mehrere Ordner mit versch. Versionen (qwt-5.0, qwt-5.1, qwt-5.2, qwt-5.x). Doch an dieser Stelle weiss ich nicht weiter.

Gruß

Martin

Verfasst: 25. März 2010 14:24
von Blubb
Hi,

am besten du erstellst dir einfach einen neuen Ordner (bspw. C:\Qwt). Wenn du jetzt einen Rechtsklick darauf machst, gibt es im Explorer die Option "SVN Checkout". Dann brauchst du nur noch oben die URL eintragen und auf OK drücken und alles sollte automatisch in diesen Ordner geladen werden.


PS: Ich hatte auch mit der letzten Version von Qwt noch die fatal errors, diese habe ich allerdings durch 'nmake /I' umgangen, wodurch die Fehler von nmake ignoriert werden und einfach weiter kompiliert wird.

Verfasst: 25. März 2010 17:31
von martin2_86
Hi Blubb,

vielen, vielen Dank. Dein "Post Scritum" Hinweis hat mich gerettet. Das mit 'nmake /I' wusst ich nicht, jetzt bin ich soweit dass ich die Qwt Widgets im Qt Designer einbauen kann.

Nun noch folgendes Problem: ich hab in VS als includeverzeichnis nur das ..Qt4\include Verzeichnis angegeben. Wenn ich in meinem code ne Qt H-File einbinden will muss ich immer das verzeichnis dazu angeben, in welchem unterordner von include das liegt (z.B. #include <QtGui/QAction>). In den erstellten ".ui" dateien wird das automatisch berücksichtigt, jedoch nicht in den erstellten dateien von Qwt, wenn ich z.B. nen Plot in meine GUI einfüge (z.B. bei #include <qframe.h> kommt ein Fehler, weil der Unterordner "Qt" nicht angegeben ist). In meinem VS 2008 Projekt hab ich unter C/C++ als Zusätzliche Includeverzeichnisse "$(QTDIR)/include" angegeben. Wie kann ich das einrichten, dass ich nur den Namen einer Datei angebe und die dann auch in allen Unterordnern von ..Qt4\include gesucht werden? Und woher kommt das, dass es beim Erzeugen der .ui dateien automatisch richtig gemacht wird?

Gruß Martin

Verfasst: 25. März 2010 18:59
von MiKla
Ich habe ein Unterordner Qwt im Qt-Include Ordner angelegt und im *.pro File INCLUDEPATH += $$QMAKE_INCDIR_QT/Qwt eingefügt. Geht wunderbar.

Michael

Verfasst: 26. März 2010 00:45
von martin2_86
Hi,

danke erstmal dass du dir Zeit genommen hast für mein Problem. Ich versteh noch nicht ganz was das genau bewirkt. Du hast einen Unterordern 'Qwt' in 'Qt4\include' angelegt und diesen als zusätzlichen Include path angegeben? Hast du dann die Header-files von Qwt in diesen Ordner kopiert oder ist der Ordner leer? Oder was genau bezweckt das?
Mein Problem ist erstmal (auch ohne Qwt) dass ich immer die Unterordner im Qt-Includeverzeichnis angeben muss (es geht nicht '#include <QWidget.h>, sondern ich muss '#include <Qt/QWidget.h>' angeben, also mit dem Ordner 'Qt'). Nun könnte ich alle Unterordner vom Qt-Includeverzeichnis als zusätzliche Includeverzeichnisse für C/C++ Projekte in Visual Studio angeben, aber das erscheint mir sehr umständlich. Da gibts doch sicher was eleganteres.

Gruß und danke im Voraus.

Verfasst: 26. März 2010 19:18
von MiKla
Also ich lasse mir die VS-Projektdatei (*.vcproj) von qmake generieren (qmake -t vcapp) und stelle alles über die *.pro Datei ein. Somit muss ich mich um keine Pfade kümmern , außer qwt, siehe oben.
Ich weiss nicht, wie Du Dein Projekt generierst?

Michael

Verfasst: 29. März 2010 15:53
von martin2_86
Ich generier mein Projekt bis jetzt immer direkt in VS2008. Ich hab da eben die ganzen Bibliotheken und Includeverzeichnisse angegeben sowie die moc-einstellungen bei den header-files angegeben und jeweils das Projekt immer im debug modus in VS angeschaut. Wo genau liegt der Unterschied zu deiner Methode (also qmake zu benutzen)? Benutzt VS auch qmake? Gruß

Verfasst: 29. März 2010 21:55
von MiKla
Es werden alle Pfade, definerte Build Schritte usw. automatisch gesetzt. Du kannst doch ein von qmake generiertes Projekt und Dein generiertes Projekt vergleichen!!! Der Vorteil von qmake generierten Projekten ist doch, dass ich mich nicht um moc, uic usw. kümmern muss.

Michael