Seite 1 von 1

was sind diese Q_D(QAbstractItemView)?

Verfasst: 27. Juli 2010 23:40
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?

Verfasst: 28. Juli 2010 06:31
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.

Verfasst: 28. Juli 2010 08:34
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/