Qt4 und Code::Blocks



  • Hallo,
    ich versuche Qt4 mit Code::Blocks zu verwenden. Ein einfaches Projekt ohne
    Q_OBJECT und ohne *.ui unterstützung wird sauber kompiliert.
    Sobald ich aber ein Projekt mit Q_OBJECT und *.ui Datei habe, Fehler über Fehler!
    Ein Fehler ist z.B. dass der uic eine Datei nicht finden kann, wenn ich den
    uic aber über die Kommandozeile aus dem Projektverzeichnis aufrufe, findet
    er die Datei. Welche Einstellungen habt ihr angepasst, damit Qt4 läuft??? :
    Ich habe unter Projekt/Build Options/Commands/Pre build steps

    qmake -project
    qmake
    make

    eingefügt und das Häckchen bei 'eigenes Makefile' gesetzt. Sollte doch
    eigentlich funktionieren.😕

    Klappt bei euch die Codevervollständigung? Wenn ich im Code meiner eingenen
    Klasse bin, werden mir auch die Methoden der Klasse angezeigt. Hat die Klasse
    aber eine z.B. QLCDNumber Member - zu der weiß der Editor garnichts...

    Gruß ERiK



  • hi,

    das eine ist ein bug. wenn du "use makefile" einschaltest (das hast du doch gemacht?), werden die pre-build-steps nicht mehr ausgeführt. bei "commands-only" - targets könnte es gehen.
    das sollte in der nächsten version behoben sein.
    wenn du qmake selbst ausführst, sollte es gehen.

    die codevervollständigung ist noch etwas ... dürftig. "follow global includes" oder so ähnlich könnte dir helfen.



  • Hi,
    erstmal danke für deine Hilfe! Das mit dem Bug ist natürlich
    ärgerlich, qmake und uic von Hand aufzurufen wollte ich ja
    gerade vermeiden.

    bei "commands-only" - targets könnte es gehen.

    Wo finde ich das? Habe mir den Wolf gesucht, aber nichts gefunden.

    Soll ich das Häckchen bei 'this is a custum Makefile' jetz lassen?

    Was ist eigentlich mit dem moc? Wenn qmake ein Makefile erzeugt hat
    und make dieses ausführt, wird dann automatisch 'gemoct'?

    Gibt es denn irgendwo eine Aleitung, in der die ganzen Einstellungen
    beschrieben sind?

    Gruß ERiK



  • HakenER schrieb:

    bei "commands-only" - targets könnte es gehen.

    Wo finde ich das? Habe mir den Wolf gesucht, aber nichts gefunden.

    project->properties->targets->type 🙂

    Soll ich das Häckchen bei 'this is a custum Makefile' jetz lassen?

    wenn du die qmake-generierte datei benutzen willst, ja.

    Was ist eigentlich mit dem moc? Wenn qmake ein Makefile erzeugt hat
    und make dieses ausführt, wird dann automatisch 'gemoct'?

    ja.

    Gibt es denn irgendwo eine Aleitung, in der die ganzen Einstellungen
    beschrieben sind?
    Gruß ERiK

    meinst du code::blocks? nicht dass ich wüsste.



  • Ich habe am Wochenende ein bischen ausprobiert:

    In meiner Version von Code::Blocks (1.0 RC-1) werden die Pre build steps
    ausgeführt. Das scheint also nicht das Problem zu sein.

    Es wird mit qmake -project eine *.pro Datei erzeugt, danach mit qmake aus
    der zuvor erstellen *.pro ein neues Makefile. Das klappt!

    In den Pre build steps bringt mich folgende Änderung ziehmlich weit:

    qmake
    make.bat
    

    Damit wird die make.bat von qt aufgerufen, es werden die ui Dateien erzeugt
    und es wird auch gemockt!

    Jetzt bekomme ich noch folgende Fehlermeldung:

    C:/projekte/qt/regetzek/FormPlotView.cpp:4: undefined reference to `vtable for FormPlotView'
    

    Das sieht nach einem Problem mit den Slots aus!? Da noch eine Idee??
    (das Makro Q_OBJECT ist gesetzt)

    Gruß ERiK


  • Mod

    schau mal ob du evtl. etwas nützliches in den Foren von Code::blocks findest,
    dort wurden ähnliche Probleme bereits diskutiert.



  • schau mal ob du evtl. etwas nützliches in den Foren von Code::blocks findest,
    dort wurden ähnliche Probleme bereits diskutiert.

    Für dieses Problem (vtable) habe ich nur was im Zusammenhang mit wxWidgets gefunden.

    Aber könnte es sein, dass es damit zusammenhängt, dass Qt ein debug und
    release Verzeichnis anlegt und die moc*.cpp da reinschreibt?
    Und der Linker findet sie dann nicht? (der sucht doch nur im Projektverzeichnis)

    Gruß ERiK



  • Fehler gefunden - neues Problem:

    Beim kompilieren wird die moc Datei im Verzeichnis /release erstellt.
    Diese muss ich dann natürlich mit

    #include "./release/moc_FormPlotView.cpp"
    

    einbinden und schon wird ohne Fehler kompiliert.

    Neues Problem: wenn ich alle Unterverzeichnisse lösche und das Projekt
    neu kompiliere, gibt es natürlich auch die moc Datei noch nicht.
    Eigentlich sollte es doch ohne Probleme möglich sein, zuerst die die cpp
    Datei durch den MOC zu jagen. Aus irgendeinem Grund wird aber zuerst die
    cpp Datei kompiliert und dann meckert der Kompiler (verstänlicherweise)
    die fehlende moc Datei an.

    Wie bekomme ich jetzt zuerst die moc Datei?

    Gruß ERiK



  • wo is das häkchen "custom makefile"
    oder sowas bei mir gibt nur
    compiler options --> build method (gnu mkae)!!!! 😕 😕



  • Ich habe eine Möglichkeit gefunden, dass es jetzt funktioniert.
    In der Projektdatei habe ich folgende Zeile eingefügt:

    MOC_DIR		= ./moc
    

    In der zu 'mocenten' cpp Datei habe habe ich folgendes include eingefügt:

    #include "./moc/moc_FormPlotView.cpp"
    

    Aus welchen Gründen auch immer, jetzt wird die moc Datei vorher erstellt
    und der Kompiler mekert nicht mehr.

    Was mich nur wundert, als ich mit Qt unter Linux programmiert habe,
    brauchte ich nie eine moc Datei zu includieren. Was läuft da anders?

    wo is das häkchen "custom makefile"

    Bei mir unter Projekt/Properties unter dem Reiter Project :p

    Gruß ERiK



  • in der neuen version von codeblocks gibts ne vorgabe für qt --> qtapplicaton 🙂


Anmelden zum Antworten