Qt - DropArea
-
Hallo,
habe hier eine DropArea-Klasse in QT. Leider habe ich gar keine Ahnung von QT, daher hoffe ich das mir geholfen werden kann. Die Dateien erstmal:#ifndef DROPAREA_HEADER #define DROPAREA_HEADER #include <QtGui/QLabel> #include <QtGui/QtGui> #include <QtGui/QDragEnterEvent> QT_BEGIN_NAMESPACE class QMimeData; QT_END_NAMESPACE class DropArea : public QLabel { // Q_OBJECT public: DropArea(QWidget *parent = 0); public slots: void clear(); protected: void dragEnterEvent(QDragEnterEvent *event); void dragMoveEvent(QDragMoveEvent *event); void dragLeaveEvent(QDragLeaveEvent *event); void dropEvent(QDropEvent *event); private: QLabel *label; }; #endif DROPAREA_HEADER
#include "DropArea.h" DropArea::DropArea(QWidget *parent) : QLabel(parent) { setMinimumSize(200, 200); setFrameStyle(QFrame::Sunken | QFrame::StyledPanel); setAlignment(Qt::AlignCenter); setAcceptDrops(true); setAutoFillBackground(true); clear(); } void DropArea::dragEnterEvent(QDragEnterEvent *event) { setText(tr("<drop content>")); setBackgroundRole(QPalette::Highlight); event->acceptProposedAction(); } void DropArea::dragMoveEvent(QDragMoveEvent *event) { event->acceptProposedAction(); } void DropArea::dropEvent(QDropEvent *event) { const QMimeData *mimeData = event->mimeData(); } void DropArea::dragLeaveEvent(QDragLeaveEvent *event) { clear(); event->accept(); } void DropArea::clear() { setText(tr("<drop content>")); setBackgroundRole(QPalette::Dark); }
Fehler- Linkermeldung:
1>MainWindow.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall MainWindow::metaObject(void)const " (?metaObject@MainWindow@@UBEPBUQMetaObject@@XZ) 1>MainWindow.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall MainWindow::qt_metacast(char const *)" (?qt_metacast@MainWindow@@UAEPAXPBD@Z) 1>MainWindow.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall MainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MainWindow@@UAEHW4Call@
Was stimmt da nicht?
Vielen Dank im Voraus!
-
Das Q_OBJECT Makro gehört nicht auskommentiert, und die Header-Datei muss durch moc laufen. Wird alles ausreichend in der Qt Dokumentation erklärt.
-
In der Moc-Datei habe ich den DropArea-Header nun inkludiert, selbige Meldung. What's wrong?
-
Kóyaánasqatsi schrieb:
In der Moc-Datei habe ich den DropArea-Header nun inkludiert, selbige Meldung. What's wrong?
Häh? Da solltest du aber nochmal genau in der Doku nachschauen...
- Q_OBJECT muss in den Header!
- Alles was gemoced werden soll, muss im .pro unter "HEADERS" aufgeführt sein.
- Wenn du das .pro änderst, musst du nochmal dein makefile erstellen - dazu nimmst du "qmake myproject.pro".
- die von moc erstellten Dateien fasst man nicht an!!!!
** WARNING! All changes made in this file will be lost!
steht doch fett drüber.