QTreeWidget Drop auf Viewport verhindern

Alles rund um die Programmierung mit Qt
Antworten
JulyDA
Beiträge: 2
Registriert: 29. August 2017 15:20

QTreeWidget Drop auf Viewport verhindern

Beitrag von JulyDA »

Hallo Zusammen,

ich habe für die Drag&Drop Funktion eine Klasse von QTreeWidget abgeleitet (namens MyTreeWidget) und möchte nun verhindern, dass die Child-Items auf den Viewport gedropped werden können, sondern nur innerhalb ihres Parents.

Mein Problem: Bei Berührung des Viewports mit einem Child-Item werden alle weiteren Drag Versuche gesperrt, unabhängig davon, was ich wohin droppen möchte.

Ich habe die Vermutung, dass es an dem event->ignore() liegt, jedoch finde ich keine andere Möglichkeit den Drop zu verhindern. Hatte jemand bereits ein ähnliches Problem oder kennt eine bessere Lösung?

Grüße,
July

Meine MyTreeWidget Klasse sieht so aus:

Code: Alles auswählen

MyTreeWidget::MyTreeWidget(QWidget *parent) : QTreeWidget(parent){}

void MyTreeWidget::dragMoveEvent(QDragMoveEvent *event){
	QAbstractItemView::DropIndicatorPosition dropIndPos = this->dropIndicatorPosition();

	if(dropIndPos==QAbstractItemView::OnViewport){
		event->ignore();
		return;
	}else{
		QTreeWidget::dragMoveEvent(event);
	}
}
Im TreeWidget habe ich folgende Einstellungen gesetzt (alle anderen stehen auf ihren Default Werten):

dragDropMode = InternalMove
dragEnabled = true
showDropIndicator = true
selectionBehavior = SelectItems
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QTreeWidget Drop auf Viewport verhindern

Beitrag von Christian81 »

Wenn Du das Event ignorierst ist es natürlich vorbei.
http://doc.qt.io/qt-5/qdragmoveevent.html#details -> vielleicht hilft void QDragMoveEvent::ignore(const QRect &rectangle) weiter.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
JulyDA
Beiträge: 2
Registriert: 29. August 2017 15:20

Re: QTreeWidget Drop auf Viewport verhindern

Beitrag von JulyDA »

Hallo,
danke für deine Antwort.

Zum Verständnis: Ignore ist doch die einzige Möglichkeit, um das Event abzulehnen oder?

Ich habe deinen Vorschlag ausprobiert und ein QRect mit den Koordinaten des Viewports erstellt. Aber der Fehler bleibt der Gleiche. Sobald event->ignore(vpRect); ausgeführt wurde, werden alle weiteren Dropversuche auch abgelehnt. :?

Ich habe auch versucht das Event zu umgehen und die Möglichkeit über das Widget via twExample->viewport()->setAcceptDrops(false); zu verhindern, aber auch das hat alle Drop Versuche blockiert..
Antworten