undefinierte referenz auf destruktor?! weiß nicht so ganz...

Alles rund um die Programmierung mit Qt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dafür wird jetzt moc_<filename>.cpp erstellt und automatisch von qmake zu den Sourcen hinzugefügt
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

ich habe mich wohl verkehrt ausgedrückt, aber du hast recht.

ich habe mal folgendes beispiel übersetzt weil ich mich gewundert habe dass man hier main.moc includieren muss weil sonst folgendes kommt:

Code: Alles auswählen

/home/daniel/qt/test/main.cpp:16: undefined reference to `vtable for HelloWorldLabel'
/home/daniel/qt/test/main.cpp:16: undefined reference to `vtable for HelloWorldLabel'
/home/daniel/qt/test/main.cpp:16: undefined reference to `vtable for HelloWorldLabel'
/home/daniel/qt/test/main.cpp:16: undefined reference to `vtable for HelloWorldLabel'

Code: Alles auswählen

#include <QtGui/QApplication>
#include <QtGui/QPushButton>
#include <QtGui/QLabel>
#include <QtGui/QMouseEvent>
#include <QtGui/QPalette>
#include <QtGui/QVBoxLayout>

class HelloWorldLabel : public QLabel
{
    Q_OBJECT
public:
    HelloWorldLabel(const QString &text, QWidget *parent = 0);
protected:
    virtual void mousePressEvent(QMouseEvent *event);
};

HelloWorldLabel::HelloWorldLabel(const QString &text, QWidget *parent)
    : QLabel(text, parent)
{}

void HelloWorldLabel::mousePressEvent(QMouseEvent *event)
{
    event->accept();
    QPalette palette = this->palette();
    QPoint pos = event->pos();
    int r = 255 * pos.x() / width();
    int g = 255 * pos.y() / height();
    int b = 255;
    palette.setColor(QPalette::Foreground, QColor(r, g, b));
    setPalette(palette);
    update();
}

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

    QWidget window;
    QVBoxLayout layout(&window);

    HelloWorldLabel label("Hello World!", &window);
    label.setAlignment(Qt::AlignCenter);
    label.setFont(QFont("Arial", 20, QFont::Bold));
    layout.addWidget(&label);

    QPushButton button("Close", &window);
    QObject::connect(&button, SIGNAL(clicked()), &window, SLOT(close()));
    layout.addWidget(&button);

    window.show();

    return app.exec();
}

#include "main.moc"
das war die *pro datei:

Code: Alles auswählen

SOURCES = main.cpp

TEMPLATE = app

CONFIG += gui
als ich die datei nach

Code: Alles auswählen

HEADERS = main.cpp

TEMPLATE = app

CONFIG += gui
änderte erzeugte qmake dann die moc_*.cpp wie folgende fhler zeigten:

Code: Alles auswählen

moc_main.cpp:11:2: #error "The header file 'main.cpp' doesn't include <QObject>."
moc_main.cpp:18: Fehler: »uint« bezeichnet keinen Typ
moc_main.cpp:35: Fehler: »QMetaObject« bezeichnet keinen Typ
moc_main.cpp:40: Fehler: expected initializer vor »*«-Zeichen
moc_main.cpp:45: Fehler: »HelloWorldLabel« wurde nicht deklariert
moc_main.cpp: In function `void* qt_metacast(const char*)':
moc_main.cpp:48: Fehler: »strcmp« wurde in diesem Gültigkeitsbereich nicht definiert
moc_main.cpp:49: Fehler: »HelloWorldLabel« wurde nicht deklariert
moc_main.cpp:49: Fehler: expected `>' vor »*«-Zeichen
moc_main.cpp:49: Fehler: expected `(' vor »*«-Zeichen
moc_main.cpp:49: Fehler: expected primary-expression vor »>«-Zeichen
moc_main.cpp:49: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
moc_main.cpp:49: Fehler: expected `)' vor »;«-Zeichen
moc_main.cpp:48: Warnung: Variable »strcmp« wird nicht verwendet
moc_main.cpp:50: Fehler: »QLabel« wurde nicht deklariert
moc_main.cpp: At global scope:
moc_main.cpp:53: Fehler: »HelloWorldLabel« wurde nicht deklariert
moc_main.cpp:53: Fehler: »QMetaObject« wurde nicht deklariert
moc_main.cpp:53: Fehler: »Call« wurde in diesem Gültigkeitsbereich nicht definiert
moc_main.cpp:53: Fehler: expected primary-expression vor "int"
moc_main.cpp:53: Fehler: expected primary-expression vor "void"
moc_main.cpp:54: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
moc_main.cpp:54: Fehler: expected `,' or `;' vor »{«-Zeichen
make: *** [moc_main.o] Fehler 1
ich denke aber mal dass dies daran liegt, dass die main.cpp doch keine richtige header ist. da binn ich mir aber nicht so ganz sicher
:oops:
und wollte fragen ob ich da richtig liege :?:
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Richtig, Q_OBJECT muss in den Header
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten