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...

    1. Q_OBJECT muss in den Header!
    2. Alles was gemoced werden soll, muss im .pro unter "HEADERS" aufgeführt sein.
    3. Wenn du das .pro änderst, musst du nochmal dein makefile erstellen - dazu nimmst du "qmake myproject.pro".
    4. die von moc erstellten Dateien fasst man nicht an!!!!
    ** WARNING! All changes made in this file will be lost!
    

    steht doch fett drüber.


Anmelden zum Antworten