QT Callback System noch nicht ganz verstanden
-
Also... qmake project.pro funktioniert. Es entstehen einige neue Dateien unter andrem eine mit dem Namen Makefile (keine Endung) eine Makefile.debug und eine Makefile.Release
Nur wie kompiliere ich das ganze nun?
wenn ich "mingw32-make.exe" ausführe bekomme ich die Meldung:
mingw32-make.exe ***: No rule to make target 'qt', needed my 'makefile'. Stop.
-
ist die QTDIR umgebungsvariable richtig gesetzt?
was "richtig" ist, erfaehsrt du per google oder vllt auch im assistant.mfg,
julian
-
in anbetracht der Tatsache, dass QMake funktioniert würde ich ja denken, dass die Variable rihctig gesetzt ist.
-
noe, das bedeutet, denk ich, nur, dass das verzeichnis mit qmake im PATH enthalten ist.
kann sein dass ich falsch liege, aber waer fuer mich logisch. lieber mal checken.mfg,
julian
-
Also... eine Umgebungsvariable mit dem Namen QTDIR existiert bei mir überhaupt nicht
Leider finde ich aber nirgendwo raus, wo die hinzeigen muss. Kannst du mir villeicht mal schreiben auf welchen QT Unterordner sie bei dir zeigt?
-
bei mir im win system:
C:\Dokumente und Einstellungen\julian>set QTDIR QTDIR=C:\Qt-4.2.3
mfg,
julian
-
Beim 2. Aufruf von qmake brauchst du den Dateinamen nicht angeben. Auch unter Windows kann man make verwenden, wenn man die Qt Command Promt verwendet (zu finden im Startmenue). Trolltech hat naemlich einen Link von make auf mingw32-make gesetzt. Wenn du die Qt Command Promt verwendest, musst du btw auch keine weiteren Umgebungsvariablen setzen..
-
zum make unter windows: prinzipiell richtig, aber ich hatte z.b. mal irgendein anderes make tool unter windows installiert, was mit qt nicht gearbeitet hat.
und dann musste ich immer "make.bat" aufrufen, was aber wie du schon sagtest eine "verknuepfung" auf "mingw32-make" ist.
und da hab ich mir halt angewoehnt gleich "mingw32-make" zu nutzen, dann ist es auch klar welches make tool es ist.was das fuer ein anderes make tool war - frag mich nicht das system gibts nicht mehr, kam mir auch komisch vor. aber meine qt projekte hat es nicht kompiliert.
mfg,
julian
-
also der QT Command Prompt verrät mir, dass meine QTDIR Variable auf F:\QT\4.3.1 gesetzt ist. Wenn ich nun (im QT Command Prompt) in meinen Projektordner wechsele und make oder auch make "qt (3).pro" eingebe bekomme ich weiterhin ein freundliches:
mingw32-make: *** No rule to make target 'qt', needed by 'makefile'. Stop.
Ist das jetzt das entgültige aus für meine GUI Programmierungs Zukunft?
-
probier mal, dem pro file einen namen ohne leerzeichen zu geben und nochmal mingw32-make (oder auch nur make) auszufuehren.
hast du vllt. mehrere qt versionen installiert?
ich hatte mal unter einem linux system das problem, dass ich in einem qt4-projekt qmake von qt3 ausgefuehrt habe, da hatte dann make auch probleme.alfonsospringer schrieb:
Ist das jetzt das entgültige aus für meine GUI Programmierungs Zukunft?
noe.
mfg,
julian
-
es tut sich was !!!!! Er scheint zu kompiliereen doch leider gibt es Fehler. Diesmal ist es aber zu viel zum abschreiben deswegen die Grafik
http://img502.imageshack.us/img502/1892/fehleryo3.th.png
->Vielen dank für eure Geduld (das bild läd sehr lange)
-
schonmal was von copy&paste gehoert?
also zum fehler:
"undefined vtable ..." gibts meist, wenn nicht alle headers und sources im pro file eingetragen sind.
alle headers mit Q_OBJECT muessen unbedingt im pro file stehen, am besten aber alle headers (und zugehoerige sources).
allerdings keine automatisch generierten dateien (moc_xxx, ui_xxx.h, ...).// edit: wenn du nicht weiterkommst poste hier mal den inhalt der pro datei in
.
mfg,
julian
-
######################################################################
# Automatically generated by qmake (2.01a) Mi 19. Sep 21:59:14 2007
######################################################################TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .# Input
SOURCES += main.cppBisschen kurz, oder? (Warum ist der Include Pfad nicht gesetzt? Ich dachte qmake macht das alles?)Wie kann man denn in der Konsole Copy&Paste anwenden? Da kann man doch nicht mal was markieren.
-
code tags !!!
###################################################################### # Automatically generated by qmake (2.01a) Mi 19. Sep 21:59:14 2007 ###################################################################### TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . # Input SOURCES += main.cpp
so da fehlt noch was denk ich.
sowas wie
TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . # Input SOURCES += main.cpp \ alle.cpp \ anderen.cpp \ dateien.cpp HEADERS += alle.h \ anderen.h \ dateien.h
da eben alle header- und implementationsdateien eintragen. auch mit pfad (relativ zu dem des pro files) also z.b.
HEADERS += src/subdir/antother_subdir/blubb.h
zum kopieren aus der konsole: markieren -> http://img03.picoodle.com/img/img03/9/9/19/f_cmdmarkierem_50e01a7.jpg
dann wenn der kram markiert ist <enter> druecken und du hast es in der zwischenablage.
nicht allzu komfortabel aber besser als immer screenshots hochzuladen.mfg,
julian
-
@copy und paste -> rechte maustaste -> markieren -> enter
@problem:
probier nochmal im projekt vz: qmake -project und dann qmake und dann make
gibts noch dateien ausser der main.cpp?
was steht in der main.cpp?
ist das was in der main.cpp drinnen ist qt 3 oder 4? du hast 4 installiert?
-
jetzt sieht das ganze so aus:
######################################################################
# Automatically generated by qmake (2.01a) Mi 19. Sep 21:59:14 2007
######################################################################TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .# Input
SOURCES += main.cppHEADERS += F:\Qt\4.3.1\include\Qt\QWidget.h \
F:\Qt\4.3.1\include\Qt\QApplication.h \
F:\Qt\4.3.1\include\Qt\QPushButton.h \
F:\Qt\4.3.1\include\Qt\QLCDNumber.h \
F:\Qt\4.3.1\include\Qt\QSlider.h \
F:\Qt\4.3.1\include\QtGUI\QVBoxLayout.h \
F:\Qt\4.3.1\include\QtGUI\QGridLayout.hqmake findet auch alle Dateien und erstellt ein Makefile - make liefert diesmal wieder fehler:
make
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directoryD:/Dokumente und Einstellungen//Eigen e Dateien/Eigene Programme/QT/QT (3)' g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT\_LARGEFILE\_SUPPORT -DQT\_DLL -DQT\_NO\_DEBUG -DQT\_GUI\_LIB -DQT\_CORE\_LIB -DQT\_THREAD\_SUPPORT -DQT\_NEEDS _QMAIN -I"f:\\Qt\\4.3.1\\include\\QtCore" -I"f:\\Qt\\4.3.1\\include\\QtCore" -I"f:\\Qt\\4. 3.1\\include\\QtGui" -I"f:\\Qt\\4.3.1\\include\\QtGui" -I"f:\\Qt\\4.3.1\\include" -I"." - I"f:\\Qt\\4.3.1\\include\\ActiveQt" -I"release" -I"." -I"f:\\Qt\\4.3.1\\mkspecs\\win32-g ++" -o release\\main.o main.cpp g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel oc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows -o "release\\qt.exe" release\\main. o -L"f:\\Qt\\4.3.1\\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4 release\\main.o:main.cpp:(.text$_ZN8MyWidgetC1EP7QWidget[MyWidget::MyWidget(QWidg et*)]+0x2d5): undefined reference to
vtable for LCDRange'
release\main.o:main.cpp:(.text$_ZN8MyWidgetC1EP7QWidget[MyWidget::MyWidget(QWidg
et*)]+0x2dc): undefined reference tovtable for LCDRange' collect2: ld returned 1 exit status mingw32-make[1]: *** [release\\qt.exe] Error 1 mingw32-make[1]: Leaving directory
D:/Dokumente und Einstellungen//Eigene
Dateien/Eigene Programme/QT/QT (3)'
mingw32-make: *** [release] Error 2Danke für den Tipp mit dem kopieren
-
aMan schrieb:
probier nochmal im projekt vz: qmake -project und dann qmake und dann make
Hast du das gemacht?
Die Includefiles gehoeren btw nicht in die pro Datei. Und dir ist hoffentlich bewusst, das du qmake nach jedem veraender der pro Datei neu ausfuehren musst.
-
also:
ich hab jetzt alles nochmal von vorn gemacht.
Ich habe den Quelltext
main.cpp:#include <QWidget.h> #include <QApplication.h> #include <QPushButton.h> #include <QLCDNumber.h> #include <QSlider.h> #include <QVBoxLayout.h> #include <QGridLayout.h> class LCDRange : public QWidget { Q_OBJECT public: LCDRange(QWidget *parent) : QWidget(parent) { QLCDNumber *lcd = new QLCDNumber(2); lcd->setSegmentStyle(QLCDNumber::Filled); slider = new QSlider(Qt::Horizontal); slider->setRange(0, 99); slider->setValue(0); connect(slider, SIGNAL(valueChanged(int)),lcd, SLOT(display(int))); connect(slider, SIGNAL(valueChanged(int)),this, SIGNAL(valueChanged(int))); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(lcd); layout->addWidget(slider); setLayout(layout); }; int value() const { return slider->value(); }; public slots: void setValue(int value) { slider->setValue(value); } signals: void valueChanged(int newValue); private: QSlider *slider; }; class MyWidget : public QWidget { public: MyWidget(QWidget *parent) : QWidget(parent) { quit = new QPushButton("Quit"); quit->setFont(QFont("Times", 18, QFont::Bold)); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); grid = new QGridLayout; previousRange = 0; for (int row = 0; row < 3; ++row) { for (int column = 0; column < 3; ++column) { LCDRange *lcdRange = new LCDRange(this); grid->addWidget(lcdRange, row, column); if (previousRange) connect(lcdRange, SIGNAL(valueChanged(int)),previousRange, SLOT(setValue(int))); previousRange = lcdRange; }; }; layout = new QVBoxLayout(); layout->addWidget(quit); layout->addLayout(grid); setLayout(layout); }; private: QPushButton* quit; QGridLayout* grid; LCDRange* previousRange; QVBoxLayout* layout; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget(NULL); widget.show(); return app.exec(); };
befindet sich in einem Verzeichnis mit dem namen qt (3)
nun wechsele ich in der QT Konsole in dieses Verzeichnis und gebe "qmake -project" ein. Es entsteht eine .pro Datei mit dem Namen "QT (3).pro" ich benenne sie in "qt3.pro" um und gebe "qmake" ein. es entstehen eine "Makefile" eine "Makefile.RELEASE" und eine "Makefile.DEBUG". Nun gebe ich "make" ein und erhalte die oben genannte Fehlermeldung. Was machen?
-
Du hast mehrere Klassen die von QObject erben in einer Datei die vom Moc'ing (Q_OBJECT) betroffen ist.
Tu' die Klasse "LCDRange" in eine separate Datei und es sollte gehen.
-
am besten die klasse in 2 dateien.
lcdrange.h und lcdrange.cpp oder so.und dann
###################################################################### # Automatically generated by qmake (2.01a) Mi 19. Sep 21:59:14 2007 ###################################################################### TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . # Input SOURCES += main.cpp \ lcdrange.cpp HEADERS += lcdrange.h
und BITTE nutze verdammtnochmal CODE TAGS!
mfg,
julian