Seite 1 von 1

Drag and Drop Event bei QTableWidgetItem

Verfasst: 17. Dezember 2006 12:39
von grosem
Hi,

ich habe mehrere QTableWidgets, deren Items man per Drag and Drop verschieben kann, auch in andere QTableWidgets rein. Mein Problem ist, dass ich gerne abfangen würde, wenn ein Item in ein anderes QTableWidget verschoben wird. Konnte leider kein geeignetes Signal/Event finden. Achja, benutzen tue ich Qt 4.2.2.

Danke für die Hilfe

Verfasst: 17. Dezember 2006 12:47
von upsala

Code: Alles auswählen

virtual bool QTableWidget::dropMimeData ( int row, int column, const QMimeData * data, Qt::DropAction action )

Verfasst: 17. Dezember 2006 13:21
von BartSimpson
Wenn du den Designer verwendest, dann besser per Eventfilter.
qobject.html#installEventFilter
Denn wenn du die virtuelle Funktion überschreiben willst, kannste den Designer nicht nutzen.

Verfasst: 17. Dezember 2006 14:47
von grosem
Danke, habe ich doch glatt übersehen.

Verfasst: 17. Dezember 2006 15:35
von grosem
BartSimpson hat geschrieben:Wenn du den Designer verwendest, dann besser per Eventfilter.
qobject.html#installEventFilter
Denn wenn du die virtuelle Funktion überschreiben willst, kannste den Designer nicht nutzen.
QTableWidgetItem ist ja nicht von QObject abgeleitet. Ich dachte dann, dass ich das so lösen kann:

Code: Alles auswählen

class Item : public QObject , public QTableWidgetItem
     {
         Q_OBJECT
      ...
      }
nebst:

Code: Alles auswählen

class ItemChanged : public QObject
     {
         Q_OBJECT

	 public:
	 
	 	ItemChanged(){ 	};
         

     protected:
         bool eventFilter(QObject *obj, QEvent *event);
     };
und


Code: Alles auswählen

 bool ItemChanged::eventFilter(QObject *obj, QEvent *event)
     {qDebug("irgendeinevent");
         if (event->type() == QEvent::DragLeave) {
             
             qDebug("dragevent");
             return true;
         } else {
             // standard event processing
             return QObject::eventFilter(obj, event);
         }
     }
.

Habe ich dann benutzt:

Code: Alles auswählen

Item *item1 = new Item();
ItemChanged *itemChanged = new ItemChanged();
 item1->installEventFilter(itemChanged);
Jedoch wird nie ein Event herausgefiltert, ganz gleich, was ich mit dem Item mache. Wo liegt mein Denkfehler?

Verfasst: 17. Dezember 2006 15:45
von BartSimpson
Du must die Tabelle selber überwachen.

Verfasst: 17. Dezember 2006 16:21
von grosem
BartSimpson hat geschrieben:Du must die Tabelle selber überwachen.
Entschuldige, aber damit komme ich leider nicht wirklich weiter? Wie überwachen und warum funktioniert das oben versuchte nicht?

edit: Vielleicht hätte ich mal ein wenig suchen sollen: http://qtforum.de/forum/viewtopic.php?t=3399 klingt ja recht ähnlich und jetzt glaube ich auch deinen Hinweis zu verstehen...