Seite 1 von 1

[gelöst] drag&drop zwischen listview und canvasview

Verfasst: 3. Mai 2005 16:27
von eve
Hallo!

Ich möchte ein ListViewItem aus einem myListView auswählen und dieses per drag&drop in einem myCanvasView als ein Rechteck darstellen.

In myListView : QListView füge ich ein startDrag() hinzu, dass von einem myCanvasView : QCanvasView akzeptiert wird.

Nun möchte ich das gedraggte Element auch droppen:
Dazu überschreibe ich in myCanvasView

dropEvent(QDropEvent *d)
{
pos = d->pos();
if (....decode(..))
{
drawRect(pos);
canvas()->update();
}

}

drawRect(QPoint pos)
{
QCanvasRectangle *rectangle = new QCanvasRectangle(...);
rectangle->setPen(black);
rectangle->setBrush(red);
rectangle->show();
}

Leider wird in myCanvasView kein Rechteck angezeigt, obwohl kein Fehler erkennbar ist. Was mache ich falsch?

Vielen Dank für Hilfe!

Eve

Verfasst: 4. Mai 2005 09:06
von ArneStocker
Hi Eve

Drag & Drop ist eine etwas komplexere Angelegenheit.

Frage : Empfängt Dein MyCanvasView denn überhaupt das Drop Ereignis und ruft anschliessend die (virtuelle) Methode MyCanvasView::dropEvent(QDropEvent *pEvent) auf ? Oder scheitert das Drop erst innnerhalb dieser Methode (z.B. beim Aufruf von ->decode(...) ) ?

Gruss Arne

Verfasst: 4. Mai 2005 09:41
von eve
Der Drop scheitert erst innerhalt der Methode, also nach dem decode, eigentlich erst beim Zeichnen des Rechtecks.

Verfasst: 4. Mai 2005 17:59
von ArneStocker
Also wird drawRect(pos) tatsächlich aufgerufen und ausgeführt. Grundsätzlich darf man auch innerhalb einer Drag & Drop Aktion beliebig rumzeichnen und Qt Objekte erzeugen. Funktioniert denn der direkte Aufruf von drawRect (ausserhalb von Drag & Drop ?)

Ansonsten könntest Du auch mal die Koordinaten von pos überprüfen. Möglicherweise wird da was falsch umgerechnet. Es gibt da die Funktion QWidget::mapTo .. blabla .. mit der die globalen Koordinaten in Fensterkoordinaten (des View) umgerechnet werden können

Gruss Arne

Verfasst: 9. Mai 2005 14:23
von eve
Habe festgestellt, dass der Fehler ganz wo anders lag. Der Bezug zu QCanvas war falsch. Trotzdem danke für die Mühen!

Eve

Verfasst: 9. Mai 2005 16:28
von FlorianBecker
Möchtest du uns sagen, wo der Fehler lag und wie du es gelöst hast?

Verfasst: 9. Mai 2005 16:46
von eve
Wenn ich drawRect aufrufe, muss ich in der Zeile

QCanvasRectangle *rectangle = new QCanvasRectangle(..., QCanvas* canvas);

bestimmen, auf welches QCanvas-Objekt sich das Rechteck bezieht. Dieses Objekt wurde bei mir aber an einer ganz anderen Stelle erzeugt, und ich habe anschließend den Überblick verloren...;)

Verfasst: 9. Mai 2005 16:48
von FlorianBecker
Danke