Seite 1 von 1

Drag&Drop von QListWidget mit Event-Filter nicht abfangb

Verfasst: 2. März 2009 00:30
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

Verfasst: 2. März 2009 15:22
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...).

Verfasst: 2. März 2009 19:28
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

Verfasst: 2. März 2009 20:58
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...

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

Verfasst: 9. Oktober 2010 04:51
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.