was sind diese Q_D(QAbstractItemView)?

Alles rund um die Programmierung mit Qt
Antworten
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

was sind diese Q_D(QAbstractItemView)?

Beitrag von forgoden »

Ich versuche eine Funktion zu reimplementieren:

z.B. will ich das aus QAbstractItemView

Code: Alles auswählen

void QAbstractItemView::dropEvent(QDropEvent *event)
{
    Q_D(QAbstractItemView);
    if (dragDropMode() == InternalMove) {
        if (event->source() != this || !(event->possibleActions() & Qt::MoveAction))
            return;
    }

    QModelIndex index;
    int col = -1;
    int row = -1;
    if (d->dropOn(event, &row, &col, &index)) {
        if (d->model->dropMimeData(event->mimeData(),
            dragDropMode() == InternalMove ? Qt::MoveAction : event->dropAction(), row, col, index)) {
                if (dragDropMode() == InternalMove)
                    event->setDropAction(Qt::MoveAction);
                event->accept();
        }
    }
    stopAutoScroll();
    setState(NoState);
    d->viewport->update();
}
in eine geerbte Klasse von QAbstractItemView vollständig zu kopieren, und soll reimplementiert werden. Aber diese Zeichen Q_D(QAbstractItemView);
und d-> und dropOn werden nicht erkannt. Ich hab überall gesucht, woher d herkommt, aber nicht gefunden. Sind das selbstdefinierte Regeln von Qt die nicht dem C++Standard entsprechen? Wie gehe ich damit um?
Win7, VisualStudio 2010, Qt 4.7
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

d ist ein Pointer auf die privaten Daten von QAbstractItemView. Q_D einfach ein Macro von Qt.
Auf die privaten Daten kannst Du (wie der Name schon sagt) nicht zugreifen. Ist auch nicht nötig.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag von guenni81 »

Hier noch ein kleiner Artikel der das mit dem Q_D Makro erklärt.
http://zchydem.enume.net/2010/01/19/qt- ... -pointers/
mfg
Günni
Antworten