Erster Versuch Autoconnect eines Designer-Dialogs

Alles rund um die Programmierung mit Qt
CptGreenwood
Beiträge: 18
Registriert: 22. November 2005 10:58

Beitrag von CptGreenwood »

Jawoll, das war es. Ich muss "mingw32-make.exe" aufrufen.

Alsdenn... ich habe jetzt glaube ich genug Infos, um erst mal weiter zu experimentieren. Als erstes werde ich versuchen, möglichst viel in CodeBlocks machen zu können, alles (z.B. qmake) wird nicht gehen. Vielleicht finde ich im Web auch ein nettes Tutorial, wie man CodeBlocks am effizientesten mit Qt einsetzt.

Danke vielmals, wenn ich mal wieder "feststecke" melde ich mich wieder. :D
Sphinx
Beiträge: 7
Registriert: 6. April 2006 15:14

Beitrag von Sphinx »

Hey.

Ich habe genau das selbe Probem... Mach gerade meine ersten Qt schritte, mit diesem Tutorial:

http://doc.trolltech.com/4.0/designer-u ... onent.html

Das funktioniert auch alles schön und gut, wenn ich das
Q_OBJECT

in der Klassendeklaration weglasse. Dann tut alles, aber nur dann. Ansonsten kommt die Fehlermeldung:

undefined reference to `vtable for Form'

Ich verwende Qt4, und Kdevelop 3.2.3 unter Ubuntu Linux. Wenn ich das Programm "von Hand" also mit qmake und make auf der Konsole ohne IDE kompiliere, kommt das selbe Problem. Was mach ich da eigentlich falsch?


Danke schon mal
Sphinx

EDIT: Hab eben erfolgreich versucht, den Code unter windows zu compilieren, wahrscheinlich ist irgendwas in der QT Installation verhunzt :-(

EDIT2: Problem gelöst. Es gab noch Interferenzen qt3... man vergewisser sich, das moc, uic und qmake links auf qt4 versionen zeigen.
Jules
Beiträge: 9
Registriert: 1. Mai 2006 23:18
Kontaktdaten:

Beitrag von Jules »

Hallo.
Auch ich mache grade meine ersten Qt-Schritte, habe ebenfalls den Fehler mit der vtable, der ohne Q_OBJECT nicht da ist.
Bei mir kann es aber keine Interferenz mit Qt 3 sein (glaube ich), da Qt 4.1.2 die erste Qt-Version ist, die ich verwende.
So sieht die Meldung aus (manchmal auch in etwas anderer Variante):

Code: Alles auswählen

/usr/bin/ld: Undefined symbols:
ImageDialog::staticMetaObject
vtable for ImageDialog
collect2: ld returned 1 exit status
make: *** [qtest4.app/Contents/MacOS/qtest4] Error 1
make: Target `all' not remade because of errors.
Falls wichtig: Ich programmiere unter Mac Os X 14.6 mit Eclipse. Compiliert habe ich einfach mit qmake, das .pro file habe ich mit qmake -project gemacht. Der ImageDialog ist natürlich eingetragen.
Danke für alle Antworten; falls das schon erklärt wurde und ich zu blöd war um es zu verstehen, erklärt es mir bitte noch mal.
Nihil agere delectat.
Tarek
Beiträge: 46
Registriert: 3. Oktober 2005 14:29
Kontaktdaten:

Beitrag von Tarek »

Einfach die Makefiles löschen und qmake nochmal ausführen... das sollte helfen.
Jules
Beiträge: 9
Registriert: 1. Mai 2006 23:18
Kontaktdaten:

Immer noch Fehler

Beitrag von Jules »

Nein, das war es leider nicht. Ich bin auf ewas Interessantes gekommen:
Die ImageDialog Klasse aus dem Tutorial sieht jetzt bei mir in etwa so aus:

Code: Alles auswählen

class ImageDialog : public QDialog
{
    Q_OBJECT

    public:
        ImageDialog(QWidget *parent = 0) : QDialog(parent) {
     	   ui.setupUi(this);
        }; 

    private:
        Ui::ImageDialog ui;
    };
So einfach, wie möglich, finde ich. Wenn ich jetzt compiliere, gibt es keinen Fehler (main ist leer).
Wenn ich in main jetzt schreibe:

Code: Alles auswählen

[...]
ImageDialog dialog;
dialog.show();
[...]
Jetzt hat er wieder den selben Error.
Schreibe ich aber

Code: Alles auswählen

[...]
ImageDialog *dialog;
dialog->show();
[...]
copiliert er zwar, wenn ich das Programm aber ausführe, setzte es folgendes:

Code: Alles auswählen

EXC_BAD_ACCESS (0x0001)
KERN_PROTECTION_FAILURE (0x0002) at 0x00000000

Thread 0 Crashed:
0    QWidget::show() + 24 (qwidget.h:399)
1    main + 176 (main.cpp:36)
2    _start + 348 (crt.c:272)
3    start + 60
:shock: Ich bin verwirrt. Was soll ich tun?

PS. Vielleicht ist auch folgendes wichtig:
Er gibt beim Compilieren immer vor der Fehlermeldung folgende Warnung aus:

Code: Alles auswählen

/usr/bin/ld: warning -L: directory name (/private/tmp/qt-mac-opensource-src-4.1.2/lib) does not exist
/usr/bin/ld: warning -F: directory name (/private/tmp/qt-mac-opensource-src-4.1.2/lib) does not exist
Ich weiß aber nicht, warum er diese Dateien braucht und warum er sie sucht (keine Ahnung, ich bin nicht schuld).
Nihil agere delectat.
Antworten