Qtコントロールドラッグイベント


http://yamcot.com/qt-drag-drop-event.html
Qtコントロールドラッグイベント
By flyingpig on 2010/06/06
699 Views|Go to Comments(1)
    エディタは異なるコントロールの間でドラッグ操作をサポートする必要があるので、Qtのドラッグについて検討しました.
    ここで簡単なドラッグプランを実現します.
1.ドラッグ&ドロップのコントロール    ドラッグはドラッグをサポートするコントロールが必要です.ドラッグ機能をオンにして、関数を呼び出します.
view source
print
?1setDragEnabled(true); 2setDragDropMode(QAbstractItemView::DragOnly);    この中で、ドラッグモードは具体的なAPIを調べることができます.ここでこの空間を設定すると、外部ドラッグ機能をサポートします.つまり、コントロールから他のコントロールにドラッグ操作するだけで、他のコントロールがこのコントロールにドラッグすることをサポートしません.
    それからstartDrag(Qt:DropActions supportedActions)関数を複写してドラッグ開始時の操作を実行します.
view source
print
?01voidDragedListWidget::startDrag(Qt::DropActions supportedActions) 02{ 03  QListWidgetItem *item = currentItem(); 04   05  QMimeData *mimeData = newQMimeData; 06  mimeData->setText(currentItem()->text()); 07  // 08  mimeData->setProperty("TYPE", QVariant("MODELS")); 09  mimeData->setProperty("MODEL_TYPE", QVariant(mType.c_str())); 10   11  QDrag *drag = newQDrag(this); 12  drag->setMimeData(mimeData); 13  drag->exec(Qt::MoveAction); 14} 
 
    ここでQListWidgetは外部ドラッグの機能をサポートしています.QMimeDataはコントロールをドラッグしてドラッグしてコントロール間でデータを転送するために使用されます.ここではQListWidget Itemのテキスト内容を伝送内容として送信します.また、限定的な属性操作set Propertyを設定しています.ドラッグ操作を実行します.
2.ドラッグストアのコントロールを受け入れる
いくつかの関数が複写されます./ドラッグしてドラッグを受信するコントロールに入ると、1.dragEnt Event(QDragEnt Everent*event)をトリガします. //ドラッグ(マウスが解放されていない場合)でドラッグを受信したコントロールから離れると、2.drage Leavevent/ドラッグ状態でドラッグを受けたコントロール内でマウスを移動したときに、3.drage Movevevent/ドラッグ状態でマウスを解放したときに、4.dropEventを起動します.
ここでは主にdragEntについて説明します.
view source
print
?01voidOgreWidget::dragEnterEvent(QDragEnterEvent *event) 02{ 03  // 04  constQMimeData *data = event->mimeData(); 05  QVariant type = data->property("TYPE"); 06  if(!mKeyDown && type == QVariant("MODELS")) 07  { 08    QVariant type = data->property("MODEL_TYPE"); 09                //...... 10    event->accept(); 11  } 12  else13    event->ignore(); 14}    まず、導入されたQDragEntから受信したQMimiDataを取得し、その後、今回のドラッグ操作が必要かどうかを判断します.もしそうであれば、イベント->accept().今回のドラッグイベントを受信したことを示します.そうでない場合はイベントを呼び出します.このドラッグ操作を破棄します.    イベントの呼び出しのみ->accept();その後drage Leavevent(QDrage Leavevent*event)、dragMovevevevevevevent(QDrag Movevevevevevent*event)、dropEvent(QDropEvent*event)は後にトリガされます.もしイベントであれば.トリガしない
 
 
Related posts
  • 卒業設計
  • TankWar V 0.1 Published
  • Qt中国語の文字化けソリューション
  • Tank War
  • TankWarシリーズ(一)基本フレーム
  • TankWar 0.2.1
  • OIS CEGUI変更ウィンドウサイズ解決方法