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
?
それからstartDrag(Qt:DropActions supportedActions)関数を複写してドラッグ開始時の操作を実行します.
view source
print
?
ここで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
?
Related posts卒業設計 TankWar V 0.1 Published Qt中国語の文字化けソリューション Tank War TankWarシリーズ(一)基本フレーム TankWar 0.2.1 OIS CEGUI変更ウィンドウサイズ解決方法
Qtコントロールドラッグイベント
By flyingpig on 2010/06/06
699 Views|Go to Comments(1)
エディタは異なるコントロールの間でドラッグ操作をサポートする必要があるので、Qtのドラッグについて検討しました.
ここで簡単なドラッグプランを実現します.
1.ドラッグ&ドロップのコントロール ドラッグはドラッグをサポートするコントロールが必要です.ドラッグ機能をオンにして、関数を呼び出します.
view source
?
1
setDragEnabled(
true
);
2
setDragDropMode(QAbstractItemView::DragOnly);
この中で、ドラッグモードは具体的なAPIを調べることができます.ここでこの空間を設定すると、外部ドラッグ機能をサポートします.つまり、コントロールから他のコントロールにドラッグ操作するだけで、他のコントロールがこのコントロールにドラッグすることをサポートしません.それからstartDrag(Qt:DropActions supportedActions)関数を複写してドラッグ開始時の操作を実行します.
view source
?
01
void
DragedListWidget::startDrag(Qt::DropActions supportedActions)
02
{
03
QListWidgetItem *item = currentItem();
04
05
QMimeData *mimeData =
new
・QMimeData;
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 =
new
QDrag(
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
?
01
void
OgreWidget::dragEnterEvent(QDragEnterEvent *event)
02
{
03
//
04
const
QMimeData *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
else
13
event->ignore();
14
}
まず、導入されたQDragEntから受信したQMimiDataを取得し、その後、今回のドラッグ操作が必要かどうかを判断します.もしそうであれば、イベント->accept().今回のドラッグイベントを受信したことを示します.そうでない場合はイベントを呼び出します.このドラッグ操作を破棄します. イベントの呼び出しのみ->accept();その後drage Leavevent(QDrage Leavevent*event)、dragMovevevevevevevent(QDrag Movevevevevevent*event)、dropEvent(QDropEvent*event)は後にトリガされます.もしイベントであれば.トリガしないRelated posts