亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【Qt學習筆記】13.拖放技術:Drag & Drop

發布時間:2020-07-29 02:38:13 來源:網絡 閱讀:4955 作者:shangluyi 欄目:編程語言

1、接受拖放


Drag & Drop 是一個界面操作,用于在兩個窗口間傳遞數據。


Drag Source: 拖放源窗口

Drag Target: 拖放目標窗口


拖放操作:

1、在源窗口:選中目標,按下鼠標,移動,拖至目標窗口(Drag)

2、在目標窗口:取消鼠標,到指定位置,松開鼠標(Drop)

(按下ESC取消操作)



MIME:

MIME(Multipurpose Internet Mail Extensions)被傳遞的數據以MIME格式傳送,它是多組type-data數據:(type0, data0)  (type1, data1)  (type2, data2)  ... (type-n, data-n)

其中,

type:字符串,用于指定數據類型,如:“text/plain”

data:字節數組,即要傳遞的數據



接受拖放的步驟:

// 接受拖放
setAcceptDrops( true );

// 重寫
void dragEnterEvent( QDragEnterEvent* event );
void dragLeaveEvent( QDragLeaveEvent* event );
void dragMoveEvent( QDragMoveEvent* event );
void dropEvent( QDropEvent* event );


小練習:

實現一個簡單的窗體,當文本被拖入該窗體時,窗體內的label控件會顯示拖入的文本內容

【Qt學習筆記】13.拖放技術:Drag & Drop

代碼:

#include <QDragEnterEvent>
#include <QDragLeaveEvent>
#include <QDragMoveEvent>
#include <QDropEvent>
 #include <QMimeData>
#include "Test13_1a_12_18.h"

Test13_1a_12_18::Test13_1a_12_18(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	setAcceptDrops(true);		//設置:接受拖放
}

// 進入
void Test13_1a_12_18::dragEnterEvent(QDragEnterEvent *event)
{
	if ( event->mimeData()->hasFormat("text/plain") )
	{
		event->acceptProposedAction();
	}	
}

//松開鼠標
void Test13_1a_12_18::dropEvent(QDropEvent *event)
{
	if (event->mimeData()->hasFormat("text/plain"))
	{
		QString text = event->mimeData()->text();
		ui.label->setText(text);
	}
}


二、發起拖放

在QWidget窗口中發起一個Drag操作 步驟:

1、鼠標按下

2、鼠標移動,當移動一段距離后,認為是一個拖動操作。可以發起一個drag動作


實現方法:

1、派生一個子類

2、重寫函數:

virtual void mouseMoveEvent( QMouseEvent* event );
virtual void mousePressEvent( QMouseEvent* event );


同時傳送多種MIME數據:

mimeData->setHtml( "xxxxxxx" );
mimeData->setText( text );
mimeData->("123," dat);     //自定義格式的數據
//data : QByteArray
void MyListWidget::mousePressEvent(QMouseEvent *event)
{
	// 記下起點
	m_dragPosition = event->pos();
	m_dragItem = this->itemAt(m_dragPosition);

	// 記得調用父類的函數(保持原有的按鍵行為)
	QListWidget::mouseMoveEvent(event);
}

void MyListWidget::mouseMoveEvent(QMouseEvent *event)
{
	// 只允許用左鍵拖動
	if ( !(event->buttons() & Qt::LeftButton) )
	{
		return;
	}

	// 移動一定距離后,才算是開始拖動
	if ((event->pos() - m_dragPosition).manhattanLength() < QApplication::startDragDistance())
	{
		return;
	}

	// 找到拖動的項
	if (!m_dragItem)
	{
		return;
	}
	QString text = m_dragItem->text();

	// 創建數據
	QDrag* drag = new QDrag(this);
	QMimeData* mimeData = new QMimeData;
	mimeData->setText(text);
	drag->setMimeData(mimeData);

	// 啟動拖放 start a drag 
	Qt::DropAction result = drag->exec(Qt::CopyAction | Qt::MoveAction);

	// 檢查操作是否成功
	if (Qt::IgnoreAction != result)
	{

	}
	else
	{
		// 按住Ctrl鍵: Qt::CopyAction
		// 沒按: Qt::RemoveAction
	}
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江口县| 阜康市| 衡水市| 隆回县| 南宫市| 丹巴县| 阿巴嘎旗| 柯坪县| 大安市| 宝山区| 苍梧县| 长宁区| 双江| 普兰店市| 海口市| 平武县| 越西县| 定西市| 府谷县| 五峰| 东平县| 上饶县| 海阳市| 明溪县| 张家界市| 金阳县| 凤山县| 海南省| 彭泽县| 绍兴市| 合肥市| 东至县| 宁蒗| 仁化县| 汾西县| 博湖县| 泗水县| 石景山区| 平顺县| 兴安盟| 巨野县|