Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Qt] Drag and drop między layoutami

Ostatnio zmodyfikowano 2015-01-06 11:01
Autor Wiadomość
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
P-124237
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 :)).
P-124241
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:

C/C++
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" ); // W metodzie dropEvent pobieram tą wartość i tyle dzięki temu wiem jaki obiekt przesyłam
    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();
   
}
P-124258
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:
C/C++
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?
P-124291
1 « 2 »
Poprzednia strona Strona 2 z 2