Seite 1 von 1

QT4 unter CodeBlocks

Verfasst: 11. März 2007 22:34
von Lumo
Hallo zusammen! bin hier neu im Forum, und benötige dringend hilfe!!
Ich binn absoluter Anfänger in QT und hoffe ich geh mit meiner fragerei niemandem auf die Nerven und bitte um verständniss wenn ich die Antworten nicht gleich verstehe!!
Ich habe Probleme mit QT unter CodeBlocks!!
Ich habe MinGW-5.1.3, CodeBlocks und die neuste QT-Version installiert.
Ich habe alles verlinkt, also unter
Compiler Settings->Directories->Compiler->C:\Programme\MinGW\include
Compiler Settings->Directories->Compiler->C:\Programme\Qt\4.2.3\include
Dann unter
Compiler Settings->Directories->Linker->C:\Programme\MinGW\lib
Compiler Settings->Directories->Linker->C:\Programme\Qt\4.2.3\lib
Wenn ich jetzt ein neues QT-Application erstelle und in der main.cpp
folgendes steht:

Code: Alles auswählen

#include <qstring.h>
#include <qapplication.h>
#include <qpushbutton.h>

int main(int argc, char **argv)
{
    QApplication    app(argc, argv);
    QPushButton     quit("Hello World!");

    quit.resize(300, 40);
    quit.setFont(QFont("Arial", 18, QFont::Bold));
    QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));
    quit.show();

    return app.exec();
}
bekomme ich folgend fehlermeldung:

Code: Alles auswählen

Project   : QT Application
Compiler  : GNU GCC Compiler (called directly)
Directory : C:\Documents and Settings\Administrator\My Documents\CodeBlocks\QTTest\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.cpp
main.cpp:1:21: qstring.h: No such file or directory
main.cpp:2:26: qapplication.h: No such file or directory
main.cpp:3:25: qpushbutton.h: No such file or directory
main.cpp: In function `int main(int, char**)':
main.cpp:7: error: `QApplication' was not declared in this scope
main.cpp:7: error: expected `;' before "app"
main.cpp:8: error: `QPushButton' was not declared in this scope
main.cpp:8: error: expected `;' before "quit"
main.cpp:10: error: `quit' was not declared in this scope
main.cpp:11: error: `QFont' has not been declared
main.cpp:11: error: `Bold' was not declared in this scope
main.cpp:11: error: `QFont' was not declared in this scope
main.cpp:12: error: `QObject' has not been declared
main.cpp:12: error: `clicked' was not declared in this scope
main.cpp:12: error: `SIGNAL' was not declared in this scope
main.cpp:12: error: `app' was not declared in this scope
main.cpp:12: error: `SLOT' was not declared in this scope
main.cpp:12: error: `connect' was not declared in this scope
Process terminated with status 1 (0 minutes, 0 seconds)
hatt vieleicht jemand eine Ahnung an wass es liegen könnte?

Verfasst: 12. März 2007 18:15
von Lumo
also ich habe noch:
Compiler Settings->Directories->compiler->C:\Programme\Qt\4.2.3\include\Qt
gelinkt.

Jetzt bekomme ich aber folgende Fehlermeldung:
Project : QT Application
Compiler : GNU GCC Compiler (called directly)
Directory : C:\Documents and Settings\Administrator\My Documents\CodeBlocks\QTTest\
--------------------------------------------------------------------------------
Switching to target: default
Linking executable: C:\Documents and Settings\Administrator\My Documents\CodeBlocks\QTTest\QTapp.exe
C:\Programme\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot find -lQtAssistantClient
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
Wass ist dieser -lQtAssistantClient und welche Einstellungen muss ich vornehmen damit er gefunden wird?

[gelöst]QT4 unter CodeBlocks

Verfasst: 12. März 2007 19:07
von Lumo
habe es hinbekommen!!
hier wass ich alles gemachd habe!!
#####Konfiguration von QT4 unter CodeBlocks####

folgende Verlinkungen:
unter: Buil->Compiler Options->Directories->Compiler:
C:\Programme\Qt\4.2.3\include
(Du musst immer die Unterverzeichnisse verlinken)
C:\Programme\Qt\4.2.3\include\Qt

unter: Buil->Compiler Options->Directories->Linker
C:\Programme\Qt\4.2.3\lib&uml;

####################

folgende änderungen vornehmen:

Project->Properties->Targets->Target's build options...->Linker:

anstadt:
lQTAssistantClient(löschen!!)

dass hier verlinken:
libQTAssitantClient4(ist im Lib-Ordner von QT4!!)

###############################################

Immer die DLL's in den Projektordner kopieren(sind im QT4 Bin-Ordner)

Verfasst: 13. März 2007 14:49
von -Marco-
naja, spätestens wenn du den moc brauchst, knallt es wieder.
Deswegen benutze ich in Codeblocks makefiles und rufe in der Konsole ggf. qmake auf.

Verfasst: 14. März 2007 01:06
von uhu01
Hy!

Du könntest auch qmake bei den Pre-Build Steps eintragen, dann musst du es nicht mal per Konsole aufrufen...

mfg
uhu01

Verfasst: 14. März 2007 18:20
von Lumo
danke für die Unterstützung!!
verstehe leider nur Banhof, habe noch nicht viel ahnung in CodeBlocks und
schongarnicht mit QT!!
naja, spätestens wenn du den moc brauchst, knallt es wieder.
Deswegen benutze ich in Codeblocks makefiles und rufe in der Konsole ggf. qmake auf.
Wass ist denn moc?

Wie arbeiten ich mit makefiles?Muss ich unter (Projekt->Properties->Project->This is a custom Makefile) das Kästchen aktivieren? Und unter (Build->Exporte Makefile) betätigen?Wenn nein, wie funktioniert das ganze?Wenn ja, habe ich wass vergessen und wass muss ich ins Makefile reinschreiben oder ändern?

Meinst du mit der Konsole, in der Taskleiste unter (Start->Ausführen...)?
Du könntest auch qmake bei den Pre-Build Steps eintragen, dann musst du es nicht mal per Konsole aufrufen...
Wass ist genau qmake und wozu brauch ich es?
Wass muss ich genau bei den Pre-Build Steps eintragen? Und ist das Käschen( Always execute, event if target is up-to-date) darunter wichtig?

Verfasst: 15. März 2007 01:52
von -Marco-
Wass ist denn moc?
Meta Object Complier, den brauchst du anderen für eigene Signals & Slots (s. QT-Doku)
Wie arbeiten ich mit makefiles?Muss ich unter (Projekt->Properties->Project->This is a custom Makefile) das Kästchen aktivieren? Und unter (Build->Exporte Makefile) betätigen?Wenn nein, wie funktioniert das ganze?Wenn ja, habe ich wass vergessen und wass muss ich ins Makefile reinschreiben oder ändern?
exportieren kannst du dir sparen. Das makefile baut qmake.
Meinst du mit der Konsole, in der Taskleiste unter (Start->Ausführen...)?
Ausführen->cmd eingeben und Enter drücken (das schwarze Dingens ;))
In dein Projektverzeichnis wechseln und nacheinander
qmake -project (erstellt QT-Project)
qmake (erstellt makefile)
und evtl. make (compiliert und linkt das ganze)
eingeben
Du könntest auch qmake bei den Pre-Build Steps eintragen, dann musst du es nicht mal per Konsole aufrufen...
Wass ist genau qmake und wozu brauch ich es?
Wass muss ich genau bei den Pre-Build Steps eintragen? Und ist das Käschen( Always execute, event if target is up-to-date) darunter wichtig?
als ich das letzte mal Pre-Build Step + custom makefiles benutzen wollte, wurden die Pre-Build Steps nicht mit ausgeführt. Evtl. hat sich das mittlerweile in einer aktuellen Version geändert (es lohnt sich eine aktuelle Version aus dem CodeBlocks-Forum (nightly builds) zu holen).

Eintragen kann man bei den Pre-Build Steps für 08/15-Projekte qmake -project und qmake.

Verfasst: 17. März 2007 17:59
von Lumo
danke!!
habe mich mal etwas schlau gemacht wegen moc und so!!

Wass mich noch wunder nimmt ist, wiso sind die pre-build Steps nur für 08/15-Projekte?

Ich habe auch noch rausgefunden, dass mann unter

System Informationen anzeigen->Erweitert->Umgebungsvariabeln->(unter)Systemvariabeln->Path
;C:\Programme\Qt\4.2.3\bin
(also einfach den Pfad zu dem bin-Ordner angeben)
(achtung das ";"Zeichen davor ist wichtig!!dient als Trennung)
anhängen muss, sonst funktioniert (qmake -project ,qmake) bei den Pre-build Steps nicht!!


Allerdings komme ich zum nächsten Problem!!
wenn ich make oder make.bat(make.bat habe ich aus einem Buch) bei
den Pre-build steps, eintrage kommt folgedes beim compilieren:
Project : QT Application
Compiler : GNU GCC Compiler (called directly)
Directory : C:\Documents and Settings\Administrator\My Documents\CodeBlocks\neu QT\
--------------------------------------------------------------------------------
Switching to target: default
Running pre-build step: default
make: *** No rule to make target `neu', needed by `Makefile'. Stop.
Process terminated with status 1 (0 minutes, 0 seconds)
also die pro-Datei und so wird generiert, die exe Datei fehlt allerdings.
wenn ich es weglasse bekomme ich folgende Fehlermeldung:
Project : QT Application
Compiler : GNU GCC Compiler (called directly)
Directory : C:\Documents and Settings\Administrator\My Documents\CodeBlocks\neu QT\
--------------------------------------------------------------------------------
Switching to target: default
Running pre-build step: default
Linking executable: C:\Documents and Settings\Administrator\My Documents\CodeBlocks\neu QT\QTapp.exe
.objs\main.o:main.cpp:(.text$_ZN19ByteConverterDialogD1Ev[ByteConverterDialog::~ByteConverterDialog()]+0xb): undefined reference to `vtable for ByteConverterDialog'
.objs\main.o:main.cpp:(.text$_ZN19ByteConverterDialogD1Ev[ByteConverterDialog::~ByteConverterDialog()]+0x17): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x177): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x183): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x117f): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x118b): more undefined references to `vtable for ByteConverterDialog' follow
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text$_ZN19ByteConverterDialog2trEPKcS1_[ByteConverterDialog::tr(char const*, char const*)]+0x1c): undefined reference to `ByteConverterDialog::staticMetaObject'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
habe allerdings nicht das gefühl dass es am Quellcode liegt, habe den Quellcode aus einem Buch!! Musste allerdings immer die includes mit ".h" ergänzen und <QHBoxLayout.h>, <QVBoxLayout.h> in <QBoxLayout.h>umwandeln und <QIntValidator.h>zu <QValidator.h> umwandeln, ist dass normal?
wenn ich Q_OBJECT weglasse funktioniert alles, bis auf die Signals und Slots!!

Marco hatt geschrieben
Ausführen->cmd eingeben und Enter drücken (das schwarze Dingens )
In dein Projektverzeichnis wechseln und nacheinander
qmake -project (erstellt QT-Project)
qmake (erstellt makefile)
und evtl. make (compiliert und linkt das ganze)
eingeben
habe da etwas probleme!!Bin ich da richtig, wenn oben am Fenster C:\WINDOWS\system32\cmd.exe steht?
Wass muss ich da genau reinschreiben, wenn
ich das Project unter C:\Programm\Projekte\MeinProjekt\ habe?
also einfach C:\Programm\Projekte\MeinProjekt\ , hatt leider nicht funktioniert!!

Giebt es eine weitere möglichkeit um das Ganze zu kompillieren?

Verfasst: 18. März 2007 21:01
von Lumo
zu meiner ersten Fehlermeldung!!
Anscheinend funktioniert make.bat, bei den pre-build steps nicht, wenn
der Projektordner-Name ein Lehrzeichen darin hatt!!

Auserdem habe ich noch rausbekommen, dass ein programm namens
msys zu Probleme geführ hatt. Ich habe es deinstalliert und bei den PATH,
der zu dem Programm gehörende Eintrag gelöscht!! Jetzt kann ich den Quelltext, ohne die Includes mit ".h" zu erweitern kompilieren, und jetzt
funktioniert auch <QHBoxLayout>, <QVBoxLayout> und <QIntValidator>!!

Allerdings habe ich jetzt ein weiteres Problem!! Habe allerdings das gefühl,
dass es trozdem am Quellcode liegt!! ich poste hier mal den Quelltext und
die Fehlermeldung, in der Hoffnung, jemand kann mir helfen!!

main.cpp

Code: Alles auswählen

#include <QApplication>
#include "ByteConverterDialog.h"

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

    ByteConverterDialog bc;
    bc.setAttribute(Qt::WA_QuitOnClose);
    bc.show();

    return a.exec();
}

ByteConverterDialog.h

Code: Alles auswählen

#ifndef BYTECONVERTERDIALOG_H
#define BYTECONVERTERDIALOG_H

#include <QDialog>
class QLineEdit;

class ByteConverterDialog : public QDialog
{
    Q_OBJECT

public:
    ByteConverterDialog();

private:
    QLineEdit* decEdit;
    QLineEdit* hexEdit;
    QLineEdit* binEdit;


private slots:
    void decChanged(const QString&);
    void hexChanged(const QString&);
    void binChanged(const QString&);
};

#endif
ByteConverterDialog.cpp

Code: Alles auswählen

#include "ByteConverterDialog.h"
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QIntValidator>
#include <QRegExpValidator>

ByteConverterDialog::ByteConverterDialog()
{
    // Erzeuge die notwendigen Layouts
    QVBoxLayout* mainLayout = new QVBoxLayout(this);
    QGridLayout* editLayout = new QGridLayout;
    QHBoxLayout* buttonLayout = new QHBoxLayout;

    mainLayout->addLayout(editLayout);
    mainLayout->addStretch();
    mainLayout->addLayout(buttonLayout);

    // Erzeuge die Labels und Line-Edits und füge sie
    // zum editLayout hinzu
    QLabel* decLabel = new QLabel(tr("Dezimal"));
    QLabel* hexLabel = new QLabel(tr("Hexadezimal"));
    QLabel* binLabel = new QLabel(tr("Binär"));
    decEdit = new QLineEdit;
    hexEdit = new QLineEdit;
    binEdit = new QLineEdit;

    editLayout->addWidget(decLabel, 0, 0);
    editLayout->addWidget(decEdit, 0, 1);
    editLayout->addWidget(hexLabel, 1, 0);
    editLayout->addWidget(hexEdit, 1, 1);
    editLayout->addWidget(binLabel, 2, 0);
    editLayout->addWidget(binEdit, 2, 1);

    // Erzeuge den "Beenden"-Knopf und füge ihn zum
    // buttonLayout hinzu
    QPushButton* exitButton = new QPushButton(tr("Beenden"));

    buttonLayout->addStretch();
    buttonLayout->addWidget(exitButton);

    setWindowTitle(tr("Zahlen-Konverter"));
    exitButton->setDefault(true);

    // Beschränke die Eingabe auf gültige Werte
    QIntValidator* decValidator =
        new QIntValidator(0, 255, decEdit);
    decEdit->setValidator(decValidator);

    QRegExpValidator* hexValidator =
        new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,2}"), hexEdit);
    hexEdit->setValidator(hexValidator);

    QRegExpValidator* binValidator =
        new QRegExpValidator(QRegExp("[01]{1,8}"), binEdit);
    binEdit->setValidator(binValidator);

    connect(exitButton, SIGNAL(clicked()),
            this, SLOT(accept()));
    connect(decEdit, SIGNAL(textChanged(const QString&)),
            this, SLOT(decChanged(const QString&)));
    connect(hexEdit, SIGNAL(textChanged(const QString&)),
            this, SLOT(hexChanged(const QString&)));
    connect(binEdit, SIGNAL(textChanged(const QString&)),
            this, SLOT(binChanged(const QString&)));
}
void ByteConverterDialog::decChanged(const QString& newValue)
{
    bool ok;
    int num = newValue.toInt(&ok);
    if (ok) {
        hexEdit->setText(QString::number(num, 16));
        binEdit->setText(QString::number(num, 2));
    } else {
        hexEdit->setText("");
        binEdit->setText("");
    }
}
void ByteConverterDialog::hexChanged(const QString& newValue)
{
    bool ok;
    int num = newValue.toInt(&ok, 16);
    if (ok) {
        decEdit->setText(QString::number(num));
        binEdit->setText(QString::number(num, 2));
    } else {
        decEdit->setText("");
        binEdit->setText("");
    }
}

void ByteConverterDialog::binChanged(const QString& newValue)
{
    bool ok;
    int num = newValue.toInt(&ok, 2);
    if (ok) {
        decEdit->setText(QString::number(num));
        hexEdit->setText(QString::number(num, 16));
    } else {
        decEdit->setText("");
        hexEdit->setText("");
    }
}
die Fehlermeldung

Code: Alles auswählen

Project   : QT Application
Compiler  : GNU GCC Compiler (called directly)
Directory : C:\Documents and Settings\Administrator\My Documents\CodeBlocks\NeuerOrdner\
--------------------------------------------------------------------------------
Switching to target: default
Running pre-build step: default
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Documents and Settings/Administrator/My Documents/CodeBlocks/NeuerOrdner'
mingw32-make[1]: Nothing to be done for `first'.
mingw32-make[1]: Leaving directory `C:/Documents and Settings/Administrator/My Documents/CodeBlocks/NeuerOrdner'
Linking executable: C:\Documents and Settings\Administrator\My Documents\CodeBlocks\NeuerOrdner\QTapp.exe
.objs\main.o:main.cpp:(.text$_ZN19ByteConverterDialogD1Ev[ByteConverterDialog::~ByteConverterDialog()]+0xb): undefined reference to `vtable for ByteConverterDialog'
.objs\main.o:main.cpp:(.text$_ZN19ByteConverterDialogD1Ev[ByteConverterDialog::~ByteConverterDialog()]+0x17): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x177): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x183): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x117f): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x118b): more undefined references to `vtable for ByteConverterDialog' follow
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text$_ZN19ByteConverterDialog2trEPKcS1_[ByteConverterDialog::tr(char const*, char const*)]+0x1c): undefined reference to `ByteConverterDialog::staticMetaObject'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 5 seconds)
Ich währe wirklich froh wenn mir jemand hellfen könnte, da ich jetzt wirklich nichtmehr weiter komme!!

Währe auch froh über ein kleines Listing, wo auch Signals und Slots integriert sind, dass jemand geschrieben hatt und bei ihm funktioniert. Am besten währe es wenn das Listing auf
CodeBlocks kompiliert wurde. Ich möchte einfach rausfinden, ob es an
meinem Listing, oder an CodeBlocks oder so liegt!!

Bin natürlich auch für andere Tips, die mein Problem lösen können nicht
abgeneigt. :wink:

Verfasst: 19. März 2007 19:14
von Lumo
Also es kommt zwar immernoch der Fehler von oben, aber ich habe mal
in den release-Ordner geschaut, und sihe da :shock: die exe-Datei ist darin und das Programm funktioniert fehlerlos.

Frage mich nur, wiso kommt die Fehlermeldung und wiso öffnet sich das
Programm nicht wenn ich es in CodeBlocks kompilliere!?

wahrscheindlich habd ihr nicht das letzte mal von mir gehört, aber ich
hoffe, ein weilchen nichtmehr!!
Wollte mich nochmals bedanken für die Hilfe und auch, dass es dieses Forum giebt, währe sonst nicht weit gekommen!!

Verfasst: 20. März 2007 23:25
von -Marco-
Lumo hat geschrieben:zu meiner ersten Fehlermeldung!!
Anscheinend funktioniert make.bat, bei den pre-build steps nicht, wenn
der Projektordner-Name ein Lehrzeichen darin hatt!!
was steht denn in dieser ominösen make.bat?
Eigentlich brauchst du die nicht (s. oben).
Allerdings habe ich jetzt ein weiteres Problem!! Habe allerdings das gefühl,
dass es trozdem am Quellcode liegt!! ich poste hier mal den Quelltext und
die Fehlermeldung, in der Hoffnung, jemand kann mir helfen!!

die Fehlermeldung

Code: Alles auswählen

Project   : QT Application
Compiler  : GNU GCC Compiler (called directly)
Directory : C:\Documents and Settings\Administrator\My Documents\CodeBlocks\NeuerOrdner\
--------------------------------------------------------------------------------
Switching to target: default
Running pre-build step: default
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Documents and Settings/Administrator/My Documents/CodeBlocks/NeuerOrdner'
mingw32-make[1]: Nothing to be done for `first'.
mingw32-make[1]: Leaving directory `C:/Documents and Settings/Administrator/My Documents/CodeBlocks/NeuerOrdner'
Linking executable: C:\Documents and Settings\Administrator\My Documents\CodeBlocks\NeuerOrdner\QTapp.exe
.objs\main.o:main.cpp:(.text$_ZN19ByteConverterDialogD1Ev[ByteConverterDialog::~ByteConverterDialog()]+0xb): undefined reference to `vtable for ByteConverterDialog'
.objs\main.o:main.cpp:(.text$_ZN19ByteConverterDialogD1Ev[ByteConverterDialog::~ByteConverterDialog()]+0x17): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x177): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x183): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x117f): undefined reference to `vtable for ByteConverterDialog'
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text+0x118b): more undefined references to `vtable for ByteConverterDialog' follow
.objs\ByteConverterDialog.o:ByteConverterDialog.cpp:(.text$_ZN19ByteConverterDialog2trEPKcS1_[ByteConverterDialog::tr(char const*, char const*)]+0x1c): undefined reference to `ByteConverterDialog::staticMetaObject'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 5 seconds)
Ich währe wirklich froh wenn mir jemand hellfen könnte, da ich jetzt wirklich nichtmehr weiter komme!!
da wurde wohl der moc nicht aufgerufen.
Schau mal im debug- bzw. release-Ordner nach, ob da die Dateien moc_ByteConverterDialog.cpp und moc_ByteConverterDialog.o existieren. Ich denke nicht. Dein Quellcode wird hier ohne Probleme kompiliert und gelinkt (mittels qmake & make).
Währe auch froh über ein kleines Listing, wo auch Signals und Slots integriert sind, dass jemand geschrieben hatt und bei ihm funktioniert.
Beispiele gibt es in den QT-Examples und in der Doku genügend.
Ich möchte einfach rausfinden, ob es an
meinem Listing, oder an CodeBlocks oder so liegt!!
In meiner Codeblocks-Version (eine recht aktuelle svn-Version unter Linux) kann ich bei aktivierten Makefiles garkeine Prebuild-Steps eintragen.
Du kannst ja bei dir mal ein fiktives Kommando absetzen (einfach abcd eintragen). Werden die Prebuild-Steps ausgeführt, erscheint an der Codeblocks-Console eine entsprechende Fehlermeldung. So bin ich damals auf diesen Bug gestoßen.
Wass mich noch wunder nimmt ist, wiso sind die pre-build Steps nur für 08/15-Projekte?
beim Ausführen von qmake -project wird die Projekt-Datei nach den Vorgaben aus den mkspecs (s. qt-Installation) erstellt. Und das ist standardmäßig eine ausführbare Datei zu dem einige qt-Bibliotheken gelinkt werden.
Es kann aber auch vorkommen, daß man statische oder dynamische Bibliotheken erstellen will oder sein Projekt gegen Fremdbibliotheken linken will.

BTW: um Compiler-Warnungen vorzubeugen solltest du virtuelle Destruktoren überschreiben. Das wird wohl in deinem Buch nicht gemacht.

Verfasst: 21. März 2007 20:38
von Lumo
was steht denn in dieser ominösen make.bat?
Also bin zwar nicht zu 100% sicher, aber, durch qmake -project wird ja
die qmake.exe im bin-Ordner von QT mit dem befehl -project aufgerufen.
qmake ruft die qmake.exe ohne befehl auf. Und make.bat ruft das make.bat File im bin-Ordner auf, dies ist ein "Windows batch File", so
eine art exe-Datei.Wenn ich darauf klicke kommt ein schwarzes fenster, und schliest sich gerade wieder. Sehrwarscheindlich ist make bei Linux,
eine exe-Datei. Korrigiert mich fals ich falsch liege, aber ich denke ich
habe recht, da die einträge bei den pre-build Steps, erst funktionierten
als ich den bin-Ordner bei den PATH's eingetragen habe!
da wurde wohl der moc nicht aufgerufen.
Schau mal im debug- bzw. release-Ordner nach, ob da die Dateien moc_ByteConverterDialog.cpp und moc_ByteConverterDialog.o existieren. Ich denke nicht. Dein Quellcode wird hier ohne Probleme kompiliert und gelinkt (mittels qmake & make).
alles klar!! Es liegt am Debug-mode!! Ich habe leider kein Debugger, da
der gdb-Debugger unter Windows XP64 nicht funktionier, und daher ist auch der Debug-Ordner leer!! Kann mann den Debug-mode in QT
irgendwie ausschalten?
Danke dass du dir die mühe gemacht hast den code zu testen!!
In meiner Codeblocks-Version (eine recht aktuelle svn-Version unter Linux) kann ich bei aktivierten Makefiles garkeine Prebuild-Steps eintragen.
Ich habe die neuste Version vonCode::Blocks runter geladen, allerdings für Windows, und bei mir funktionierts!!
Wie meinst du aktivieren?Die Makefiles werden ja beim aufruf von qmake erstellt!! mit "This is a custom Makefile"aktivieren?Heist dass nicht "dies ist ein massgeschneidertes Makefile"?währe ja
irgendwie logisch, weil darunter steht "the file must exist, no makefile will
be auto-generadet" , also übersetzt, das File muss existieren, wenn kein Makefile existiert wird eins automatisch generiert!!hast du fieleicht am
Makefile rumgebastelt?hoff ich habe hier kein mist erzählt, aber anderst kann ich es mir nicht vorstellen!!Aber bei mir gehen die pre-build steps so oder so, ob ich "This is a custom Makefile" aktiviert habe oder nicht!!
Du kannst ja bei dir mal ein fiktives Kommando absetzen (einfach abcd eintragen). Werden die Prebuild-Steps ausgeführt, erscheint an der Codeblocks-Console eine entsprechende Fehlermeldung. So bin ich damals auf diesen Bug gestoßen.
:D ich hatte ja am anfang so ein Fehler, wusste allerdings nicht wass dies
zu bedeuten hat!!

beim Ausführen von qmake -project wird die Projekt-Datei nach den Vorgaben aus den mkspecs (s. qt-Installation) erstellt. Und das ist standardmäßig eine ausführbare Datei zu dem einige qt-Bibliotheken gelinkt werden.
Komme nicht ganz draus, auf wass willst du hinaus?
Es kann aber auch vorkommen, daß man statische oder dynamische Bibliotheken erstellen will oder sein Projekt gegen Fremdbibliotheken linken will.
Was sind Statische und Dynamische Bibliotheken? Wass meinst du mit
Fremdbibliotheken, etwa eine DLL oder zum beispiel STL(Standart Template Library)?Ich weiss zwar noch nicht wozu QT in stand ist, aber
kann mann die nicht einfach in Code::Blocks verlinken und dann ins Projekt includieren?

Verfasst: 24. März 2007 19:34
von -Marco-
Lumo hat geschrieben:
alles klar!! Es liegt am Debug-mode!! Ich habe leider kein Debugger, da
der gdb-Debugger unter Windows XP64 nicht funktionier, und daher ist auch der Debug-Ordner leer!! Kann mann den Debug-mode in QT
irgendwie ausschalten?
Danke dass du dir die mühe gemacht hast den code zu testen!!
eigentlich sollte sollte die Debug-Version auch ohne Debugger kompilieren. Hier wird ja dem Compiler nur ein Parameter mehr mit übergeben.
Ob der gcc unter XP64 damit aber Probleme hat, weiß ich nicht.
Ich habe die neuste Version vonCode::Blocks runter geladen, allerdings für Windows, und bei mir funktionierts!!
Wirklich die neueste Version aus dem Forum oder doch die alte 2005er Version?
Komme nicht ganz draus, auf wass willst du hinaus?
es wird ein Projekt nach einer Vorlage erstellt. Anfangs genügt das häufig, früher oder später will man aber mehr. Und hier ist ein qmake -project eher hinderlich, da die *.pro-Datei überschrieben wird.
Was sind Statische und Dynamische Bibliotheken? Wass meinst du mit
Fremdbibliotheken, etwa eine DLL oder zum beispiel STL(Standart Template Library)?
das sind Basics und hier recht OT. Schau mal Netz nach, da gibt es haufenweise Material zu.
Ich weiss zwar noch nicht wozu QT in stand ist, aber
kann mann die nicht einfach in Code::Blocks verlinken und dann ins Projekt includieren?
Wenn du mit Custom Makefiles arbeitest, fungiert Codeblocks nur noch als besserer Editor. Der Rest wird über die *.pro-Datei gesteuert (siehe Doku).

Verfasst: 28. März 2007 20:56
von Lumo
Wirklich die neueste Version aus dem Forum oder doch die alte 2005er Version?
Hatte wohl doch nicht die neuste Version!!Aber die ist ja wirklich sehr aktuell!!Habe die 2007 Version jetzt installiert, gefällt mir gut!! Die pre-build steps gehen jetzt allerdings auch nichtmehr wenn ich "This is a custom Makefile" aktiviert habe!!

Habe die ganze sache mit der Konsole begriffen!! Für die, die es nicht wissen wie das ganze funktiooniert, mit dem Verzeichnis wechsel, einfach mal in der konsole unter cmd, HELP eingeben!!

Alllerdings funktioniert bei mir make und make.bat nicht!! Es kommt folgende fehlermeldung:
Der Befehl "mingw32-make" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Ich bekomm noch ne Kriese!!muss ich vieleicht noch etwas an CodeBlocks ändern, oder liegd der Fehler wo anders?

Verfasst: 29. März 2007 00:35
von dhcase
Wenn du unter Windows arbeitest (geh ich mal von aus), dann musst du den Pfad von MinGW dem PATH hinzufügen:
  • Rechtsklick auf Arbeitsplatz
  • Eigenschaften
  • Erweitert
  • Umgebungsvariablen
  • PATH anpassen, z.B. C:\Qt\4.1.4\bin;C:\MinGW\bin
Gruss,
D