2011-10-12 7 views
4

ドラッグで画像を開始しました。Qtドラッグアンドドロップ - ドラッグ中に画像表示を変更する

QDrag* drag = new(QDrag)(this); 
drag->setPixmap(*pixmap); 
drag->exec(Qt::CopyAction | Qt::MoveAction); 

私のドラッグがウィジェットの特定のポイントに達すると、イメージの表示を変更したいと思います。

現在、私は考えています。最初のドラッグを開始した後、ドラッグが一定のポイントに達すると、最初のドラッグをキャンセルして、新しいドラッグで新しいドラッグを再開します。

dragMoveEventでこれを行います。新しい画像で新しいドラッグを開始できます。しかし、私は最初の抗力をキャンセルすることができないようです。以前のドラッグ・ドロップ操作がまだ実行されていることがわかりました。

誰もがお勧めできます。

if (event->mimeData()->hasText()) 
{ 
    if (need_to_change_pixmap()) 
    { 
    event->setDropAction(Qt::IgnoreAction); 
    change_pixmap_restart_drag(); 
    } 
    else 
    { 
    event->setDropAction(Qt::MoveAction); 
    event->accept(); 
    } 
} 
else 
{ 
    event->ignore(); 
} 

change_pixmap_restart_drag機能だけでドラッグを開始します。

答えて

5

Qt's documentationによれば、ドラッグが開始されると、ピクスマップを変更することはできません。

Qtは使用しています:

  • X11上でマウスをたどるフレームレスウィンドウを。 pixmapはウィジェットに描画され、setGrabMouseはウィジェットがマウスの直下にないため、マウスイベントを受け取るために使用されます。
  • SetCursorWindowsの場合、各アクションのカーソルがコーナーに描かれているpixmapのコピーがあります。
  • マック
  • 機能SetDragImageWithCGImageが、qdnd_mac.mmでアクセスできないローカル変数として宣言されDragRefオブジェクトを必要とします。

すべてのプラットフォームでX11メソッドを使用するか、Windowsにアプリケーションをデプロイする予定がある場合はSetCursorを使用します。ドラッグ中のデータを表し、ドロップ操作するために使用pixmapとして

void QDrag::setPixmap (const QPixmap & pixmap) : 

セットpixmap:QDragドキュメントから

+0

ありがとうございます。 –

+0

@ Kong可能な回避策に関する情報を追加しました。 – alexisdm

0

。ドラッグが開始される前にpixmapだけを設定することができます。

だから、申し訳ありませんが、できません。 偶数setDragCursor()は効果のない方法です...

関連する問題