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
[gelöst] drag&drop zwischen listview und canvasview
-
ArneStocker
- Beiträge: 300
- Registriert: 3. November 2004 16:15
- Wohnort: Berlin
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
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
-
ArneStocker
- Beiträge: 300
- Registriert: 3. November 2004 16:15
- Wohnort: Berlin
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
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
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
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...
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...
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten: