Drag&Drop von QListWidget mit Event-Filter nicht abfangb

Alles rund um die Programmierung mit Qt
Antworten
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Drag&Drop von QListWidget mit Event-Filter nicht abfangb

Beitrag von FaS »

Hallo,

Ich habe ein Event-Filter für mein QListWidget installiert aber bekomme keine Drag&Drop-spezifischen Ereignisse außer einem QEvent::DragEnter, aber auch nur, wenn ich ein Element aus dem View heraus und wieder herein bewege.

Da ich dieses eine Event bekomme, und der selbe Filter bei z.B. einem QLineEdit die vermissten Events empfängt, scheint mir das Verhalten recht unlogisch.

Implementation:

Code: Alles auswählen

MainWindow::MainWindow()
{
  m_commandsListWidget_dragDropHandler = new CommandsListWidget_dragDropHandler( this, this );
  m_ui.commandsListWidget->installEventFilter( m_commandsListWidget_dragDropHandler );
  m_ui.commandsListWidget->setDragEnabled( true );
  m_ui.commandsListWidget->setAcceptDrops( true );
  m_ui.commandsListWidget->setDropIndicatorShown( true );
  m_ui.commandsListWidget->setDragDropMode( QAbstractItemView::InternalMove ); // DragDrop-Mode funktioniert auch nicht
}

Code: Alles auswählen

CommandsListWidget_dragDropHandler::CommandsListWidget_dragDropHandler( QObject *parent, MainWindow *mainWindow_ )
: QObject( parent ), m_mainWindow( mainWindow_ )
{
}

bool CommandsListWidget_dragDropHandler::eventFilter( QObject *obj, QEvent *event )
{
  if( event->type() == QEvent::Drop )
    std::cout << "Drop" << std::endl;
  return QObject::eventFilter(obj, event);
}
Deklaration:

Code: Alles auswählen

class CommandsListWidget_dragDropHandler : public QObject
{
  Q_OBJECT
  public:
    CommandsListWidget_dragDropHandler( QObject *parent, MainWindow *mainWindow_ );
  protected:
    bool eventFilter( QObject *obj, QEvent *event );
  private:
    MainWindow *m_mainWindow;
};
Gruß,
FaS
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

interessant.. ich sehe keinen offensichtlichen Fehler... und im Task-Tracker hat es auch keine entsprechende Meldung... kannst du uns eine moeglichst kleine Demo liefern? Optimal waere, wenn (abgesehen von der EventFilter-klasse) alles im main.cpp aufgesetzt wuerde (also neben dem Event-Filter keine weiteren Klassen) und zwei saubere (Debug-)Meldungen (die eine bei einem QLineEdit (die dann erscheint), die andere beim ListWidget, welche dann eben _nicht_ erscheint...).
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Hmm scheint irgendwie überall nicht zu funktionieren, außer beim QLineEdit.
Getestet: QListWidget, QTreeWidget, QPlainTextEdit, QTextEdit, QLineEdit.

Für diese Widgets (außer QTextEdit) befindet sich im Anhang ein kleines Testprogramm mit 2-3 Instanzen jeden Typs zum herumprobieren, bei den Listen mit 2 unterschiedlichen Drag&Drop-Modes.
Die Events werden inkl. Instanzname in einem Textfeld geloggt. Es wird für alle Widgets der selbe event filter benutzt.

Gruß,
FaS
Dateianhänge
eventfilter.zip
Drag&amp;Drop-Events-Testprogramm (Code)
(2.57 KiB) 142-mal heruntergeladen
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Ich kann das Verhalten auf drei Plattformen (Qt4.4.0/Linux, Qt4.3.4/Solaris und Qt4.4.3/OsX) bestätigen... Also entweder übersehen wir was (ich habe keine Erfahrung mit DnD) oder das gibt ein Bug-Report...
gboelter
Beiträge: 80
Registriert: 5. Dezember 2007 14:52
Wohnort: Davao City, Philippines

Re: Drag&Drop von QListWidget mit Event-Filter nicht abf

Beitrag von gboelter »

Sorry, wenn ich diesen alten Thread noch mal nach oben hole, aber hat es zu diesem Problem jemals eine Loesung gegeben?
FaS hat geschrieben: Ich habe ein Event-Filter für mein QListWidget installiert aber bekomme keine Drag&Drop-spezifischen Ereignisse außer einem QEvent::DragEnter, aber auch nur, wenn ich ein Element aus dem View heraus und wieder herein bewege.
Ich sitze seit drei Tagen vor dem gleichen Problem beim Drag&Drop zwischen einem QTreeWidget und einem QTableWidget. DnD funktioniert zwar grundsaetzlich, nur bekomme ich trotz 'setDropIndicatorShown(true)' selbigen nicht zu sehen. Stattdessen erscheint neben dem '+' ein kleines aber leeres Quadrat.

Ziehe ich das entsprechende Item kurz aus seiner Position und gleich wieder zurueck, dan klappt's mit dem DropIndicator.
Guenther
Davao City, Philippines, Planet Earth, 28°C

Qt 4.8.1 for Linux/X11 - Open Source Edition for Application Development
Antworten