[Qt] Drag and drop między layoutami
Ostatnio zmodyfikowano 2015-01-06 11:01
Nowicjusz Temat założony przez niniejszego użytkownika |
» 2015-01-05 18:33:10 Wiesz co puki co ustawiam setObjectName i na bazie tego wnioskuje co przesłałem, wiem że to jest jest idealne podejście ale każde jakiekolwiek rozwiązanie problemu w qt mnie cieszy ;p |
|
turaz |
» 2015-01-05 18:49:58 Ogólnie nie bardzo rozumiem po co ustawiasz to property('objectname'). Pochwal się kodem jeśli chcesz pomocy (nie gryzę, ale też nie umiem omawiać kodu nie widząc go :)). |
|
Nowicjusz Temat założony przez niniejszego użytkownika |
» 2015-01-05 20:12:27 No ok, może nie do końca to rozumiem ale wydaje mi się że mimeData jest po to aby zawartość później odebrać w metodzie dropEvent, dlatego ustawiłem sobie dla przykładu objectName. Poniższy kod to w sumie modyfikacja tego z example draggabletext: void DragWidget::mousePressEvent( QMouseEvent * event ) { QLabel * child = static_cast < QLabel *>( childAt( event->pos() ) ); if( !child ) return; QPoint hotSpot = event->pos() - child->pos(); QMimeData * mimeData = new QMimeData; mimeData->setObjectName( "Janusz" ); QPixmap pixmap( child->size() ); child->render( & pixmap ); QDrag * drag = new QDrag( this ); drag->setMimeData( mimeData ); drag->setPixmap( pixmap ); drag->setHotSpot( hotSpot ); Qt::DropAction dropAction = drag->exec( Qt::MoveAction, Qt::CopyAction ); if( dropAction == Qt::MoveAction ) child->close(); }
|
|
turaz |
» 2015-01-06 11:01:11 1. Z innej beczki w Qt zaleca się używanie qobject_cast na QObjectach dlatego zamieniłbym ten static_cast 2. Jeżeli chcesz przekazywać jakąś prostą rzecz w tym d&d jak w Twoim przypadku tekst to QMimeData posiada odpwiednie metody do tego: http://qt-project.org/doc/qt-4.8/qmimedata.html (np. setText() ) 3. Jeżeli chcesz w jakiś mądrzejszy sposób sprawdzić czy ten obiekt może zostać upuszczony dokładnie na tym widget'cie to ustaw mu Data() tak jak jest to zrobione w tym przykładzie: QMimeData * mimeData = new QMimeData; mimeData->setData( "application/x-dnditemdata", itemData );
oczywiście ta nazwa: "application/x-dnditemdata"; Przy dropEvent sprawdzaj czy ten mimeData to jest ten, który chcesz otrzymywać. 4. Czy na ten DragWidget też chcesz mieć możliwość droppowania? |
|
1 « 2 » |