91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

【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

吉安县| 钦州市| 沅陵县| 井研县| 鹤庆县| 新建县| SHOW| 剑阁县| 抚远县| 乳源| 青冈县| 兴业县| 青铜峡市| 荆州市| 沙雅县| 大埔县| 吴堡县| 三河市| 海门市| 南通市| 太仓市| 顺平县| 晋城| 邢台县| 哈密市| 马公市| 琼海市| 修水县| 四平市| 吴堡县| 南康市| 开阳县| 濉溪县| 喀喇| 郧西县| 岢岚县| 武汉市| 彭水| 长春市| 昭觉县| 体育|