精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

QT核心編程之鼠標拖放 (4)

移動開發
拖放機制包括拖動、放下、剪貼板、拖放操作、添加新的拖放類型、高級拖放以及和其它應用程序之間的操作幾個方面。

QT核心編程之鼠標拖放是本節介紹的內容。QT核心編程我們要分幾個部分來介紹,想參考更多內容,請看末尾的編輯推薦進行詳細閱讀,先來看本篇內容。

拖放提供了一種用戶在應用程序之間或之內傳遞信息的一種簡單可視機制。在術語中,這被稱為"直接操作模型"。拖放在功能上類似剪貼板的剪切和粘貼機制。拖放機制包括拖動、放下、剪貼板、拖放操作、添加新的拖放類型、高級拖放以及和其它應用程序之間的操作幾個方面。下面從這幾個方面分別進行說明:

(1)拖動

開始一個拖動,比如是在鼠標移動事件,創建一個適合你的媒體的QDragObject的子類的對象,例如:對于文本使用QTextDrag,對于圖片使用QImageDrag。然后調用drag()方法。例如,從一個窗口部件中開始拖動一些文本:

  1. void MyWidget::startDrag()  {  
  2.    QDragObject *d = new QTextDrag( myHighlightedText(), this );  
  3.     d->dragCopy(); //拷貝選中文本    // 不要刪除d    

注意在拖動之后,QDragObject沒有被刪除。在拖放明顯完成后,這個QDragObject需要被保存。因為它還可能需要與其它進程通信。最后 Qt會刪除這個對象。如果擁有拖動對象的窗口部件在刪除拖動對象之前被刪除,那么任何沒有完成的放下操作將會被取消,并且拖動對象會被刪除。因為這個原因,你應該小心對待對象引用。

(2)放下

為了能在一個窗口部件中接收被放下的媒體,這個窗口部件調用setAcceptDrops(TRUE)(如:在它的構造函數中),并且重載事件處理方法dragEnterEvent()和dropEvent()。對于更復雜的應用程序,重載dragMoveEvent()和 dragLeaveEvent()也是必需的。

例如,當拖動后放下文本或圖片時,窗口部件接受并處理放下操作的代碼如下:

  1. MyWidget::MyWidget(...) :    QWidget(...)  {  
  2.      ...     setAcceptDrops(TRUE); //接收被放下的媒體  
  3.   }//當一個拖動正在進行并且鼠標進入這個窗口部件,這個事件處理函數被調用    
  4. void MyWidget::dragEnterEvent(QDragEnterEvent* event)  {   
  5.     event->accept( QTextDrag::canDecode(event) ||         QImageDrag::canDecode(event)  );  
  6.   }//當拖動在這個窗口部件上被放下,這個事件處理器被調用  
  7.   void MyWidget::dropEvent(QDropEvent* event)  {   
  8.     QImage image;  
  9.      QString text;   
  10.      if ( QImageDrag::decode(event, image) ) {//解碼圖片  
  11.         insertImageAt(image, event->pos()); //在窗口部件中插入圖片  
  12.      } else if ( QTextDrag::decode(event, text) ) {   
  13.        insertTextAt(text, event->pos());  
  14.       }  
  15.   } 

(3)剪貼板

QDragObject、QDragEnterEvent、QDragMoveEvent和QDropEvent類都是 QMimeSource(提供類型信息的類)的子類。如果你在QDragObject中基于你的數據進行傳遞,你不僅可使用拖放,而且還可以使用傳統的剪切和粘貼。QClipboard有兩個函數:

  1. setData(QMimeSource*)  
  2.       QMimeSource* data()const 

使用這些函數,你可以把你的拖放初始信息放到剪貼板中:

  1. void MyWidget::copy(){  
  2.     QApplication::clipboard()->setData( new QTextDrag(myHighlightedText()) );  
  3. }  
  4.  void MyWidget::paste(){  
  5.     QString text;   
  6.    if ( QTextDrag::decode(QApplication::clipboard()->data(), text) )  
  7.         insertText( text );  

你甚至能使用QDragObject的子類作為文件I/O部分。例如,如果你的程序有一個QDragObject的子類把CAD設計編碼成DXF格式,你可以象下面這樣存儲和裝載這個格式的文件:

  1. void MyWidget::save(){  
  2.     QFile out(current_file_name);  
  3.     out.open(IO_WriteOnly);  
  4.     MyCadDrag tmp(current_design); // MyCadDrag是QDragObject的子類  
  5.     out.writeBlock( tmp->encodedData( "image/x-dxf" ) );  
  6. } void MyWidget::load(){   
  7.    QFile in(current_file_name);   
  8.    in.open(IO_ReadOnly);   
  9.    if ( !MyCadDrag::decode(in.readAll(), current_design) ) {  
  10.        QMessageBox::warning( this, "Format error", tr("The file \"%1\" is not in any supported format") .arg(current_file_name) );  
  11.     }  

(4)拖放操作

在一些簡單的情況下,拖放的目標接收一個被拖動的數據的拷貝,并且由源來決定是否刪除初始的拖動對象。這是QDropEvent中的"Copy"操作。目標也可以選擇理解其它操作,特別是"Move"和"Link"操作。如果目標理解了"Move"操作,目標負責拷貝和刪除操作,源不會嘗試刪除數據。如果目標理解為"Link"操作,它存儲它自己的引用到初始信息中,并且源不會刪除初始信息。最通用的拖放操作是在同一個窗口部件中執行一個"Move"操作。

拖動操作的另一個主要用途是當使用一個引用類型,比如text/uri-list,實際上被拖動的數據是文件或對象的引用。

(5)添加新的拖放類型

拖放不僅僅局限于文本和圖片,任何信息都可以被拖放。為了在應用程序之間拖放信息,兩個應用程序必須指明彼此都能接受和產生的數據格式。這個可以通過使用MIME類型來獲得。拖動的源提供一個它能產生的MIME類型列表(按從最合適的到最少合適的順序排列),并且放下的目標選擇一種它能接受的類型。例如,QTextDrag提供了"text/plain"MIME類型(普通的沒有格式的文本),還有"text/utf16"和"text /utf8"的Unicode格式的類型。QImageDrag提供了"image/*"類型,*是QImageIO支持的任何一種圖片格式,并且 QUriDrag子類提供了"text/uri-list"的支持,它是傳輸一個文件名列表(或URL)的標準格式。

為了實現一些還沒有可用QDragObject子類的信息類型的拖放,首先和最重要的步驟是查找合適的存在格式:IANA(Internet Assigned Numbers Authority)在ISI(Information Sciences Institute)提供了一個MIME媒體類型的分級列表。使用標準的MIME類型將會使你的應用程序現在及未來能更好地與其它軟件互相操作。

為了支持另外的媒體類型,從QDragObject或QStoredDrag派生類。當你需要提供多種媒體類型的支持時,從QDragObject派生類。當一個類型足夠時,就從更簡單的QStoredDrag派生類。

QDragObject的子類將會重載const char* format(int i) const和QByteArray encodedData(const char* mimetype) const成員,并且提供一套方法編碼媒體數據,提供靜態成員canDecode()和decode()解碼輸入的數據,QImageDrag的成員函數 bool canDecode(QMimeSource*) const和QByteArray decode(QMimeSource*) const在子類中需要類似的重載。

QStoredDrag的子類提供了提供一套方法編碼媒體數據,靜態成員canDecode()和decode()對進入的數據進行解碼。

(6)高級拖放

在剪貼板模式中,用戶可以剪切或復制資源信息,然后粘貼它。相似地,在拖放模式中,用戶可以拖動信息的拷貝或者拖動信息本身到一個新的位置(移動它)。拖放模式對于程序員來說都是更多的復雜性:程序直到放下(粘貼)完成才會知道用戶是想剪切還是復制。在應用程序之間拖動,這個沒有什么區別,但是在一個應用程序之內進行拖動,應用程序必須小心不要將拷貝粘貼到同一個地方。例如,在同上窗口部件中拖動文本,拖動的開始點和放下事件處理函數應象下面這樣重載:

  1. void MyEditor::startDrag(){  
  2.     QDragObject *d = new QTextDrag(myHighlightedText(), this);  
  3.     if ( d->drag() && d->target() != this )  cutMyHighlightedText(); //剪切選中的文本  
  4. }  
  5.  void MyEditor::dropEvent(QDropEvent* event){  
  6.     QString text;   
  7.     if ( QTextDrag::decode(event, text) ) {   
  8.       if ( event->source() == this && event->action() == QDropEvent::Move ) {          // 在同一個窗口部件時,不能使用粘貼拷貝,而應是移到到這個位置  
  9.           event->acceptAction();  
  10.           moveMyHighlightedTextTo(event->pos());  
  11.        }  
  12.  else {  
  13.           pasteTextAt(text, event->pos()); //粘貼拷貝  
  14.        }  
  15.     }  

一些窗口部件在數據被拖動到它們上面時需要指定"是"或"否"接收。例如,一個CAD程序也許只接收在視圖中的文本對象上放下的文本。在這種情況下,dragMoveEvent()被使用并且給定接受或者忽略拖動的區域。代碼列出如下:

  1. void MyWidget::dragMoveEvent(QDragMoveEvent* event){   
  2.    if ( QTextDrag::canDecode(event) ) {   
  3.      MyCadItem* item = findMyItemAt(event->pos());  
  4.        if ( item )  
  5.         event->accept();  
  6.     }  

(7)和其它應用程序之間的操作

在X11上,拖動使用公有的XDND協議,而Qt在Windows上使用OLE標準,Qt在Mac上使用Carbon拖動管理器。在X11 上,XDND使用MIME,所以不需要轉換。Qt的應用編程接口與平臺無關。在Windows上,識別MIME的應用程序可以通過使用MIME類型的剪貼板格式名字進行通信。一些Windows應用程序已經對它們的剪貼板格式使用MIME命名規范了。在內部,Qt有能力在專有的剪貼板格式和MIME類型之間轉換。在X11上,Qt也支持使用Motif拖放協議的拖動。

小結:QT核心編程之鼠標拖放的內容介紹完了,希望本文對你有所幫助,如果需要更多的內容,請參考編輯推薦。

【編輯推薦】

QT核心編程之Qt模板庫(1)

QT核心編程之集合類 (2)

QT核心編程之Qt線程 (3)

QT核心編程之鍵盤焦點 (5)

QT核心編程之會話管理 (6)

QT核心編程之調試技術 (7)

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-22 10:12:08

Qt 線程

2011-06-22 09:40:32

QT 模板庫 模板

2011-06-22 09:58:04

QT 集合類

2011-06-22 10:39:56

QT 會話管理

2011-06-22 10:27:32

QT 鍵盤 焦點

2011-06-22 10:45:21

QT 調試

2012-01-17 13:46:55

JavaSwing

2011-06-17 14:54:31

Qt

2010-06-11 09:01:02

.NET 4并行編程

2010-06-24 09:12:27

.NET 4并行編程

2012-10-29 13:25:54

JavaScriptJSjQuery

2011-09-07 17:04:40

QT平臺模擬鼠標

2011-08-29 11:25:29

QTWebKit鼠標

2015-04-24 09:48:59

TCPsocketsocket編程

2011-06-13 11:07:22

QT 移植

2017-02-07 18:34:16

Linux編程PING

2022-02-14 15:07:48

進程FileChanne線程

2011-07-21 10:17:53

java

2014-12-16 09:10:52

IPv4IPv6TCP

2011-06-24 15:30:22

QT 皮膚 QSS
點贊
收藏

51CTO技術棧公眾號

欧美高清视频www夜色资源网| 久久亚洲综合色一区二区三区| 国产亚洲一区二区在线| 亚洲久久中文字幕| 91高清在线观看视频| 丰满白嫩尤物一区二区| 欧美亚洲午夜视频在线观看| www.日本高清视频| 果冻天美麻豆一区二区国产| 午夜精品一区在线观看| 午夜精品区一区二区三| 国产黄色一区二区| 久久精品人人| 欧美国产中文字幕| 波多野结衣家庭教师在线观看| 亚洲精品观看| 欧美日韩国产高清一区二区三区| 日本一本中文字幕| 在线观看免费黄色| 99精品视频在线免费观看| 91精品国产自产在线老师啪 | 国产精品国产三级国产普通话99| 痴汉一区二区三区| 91九色蝌蚪91por成人| 国产精品一级| 欧美激情综合色| 欧美色图17p| 免费视频亚洲| 亚洲第一黄色网| 四虎成人在线播放| 欧美黄色网页| 精品福利在线看| 青青草影院在线观看| 国产黄色免费在线观看| 91在线你懂得| 翡翠波斯猫1977年美国| 国产精品久久久久久久成人午夜| 久久香蕉精品| 91精品国产色综合久久不卡98| 男女性高潮免费网站| 精品国产一区二区三区四区| 亚洲精品不卡在线| 精品人妻二区中文字幕| 精品国产伦一区二区三区观看说明 | 国产精品一二三区| 国产在线视频2019最新视频| 无码一区二区三区| 久久久久久穴| 日韩美女视频中文字幕| 成人精品在线看| 亚洲国产一区二区三区a毛片| 欧美日韩成人在线播放| 永久免费看黄网站| 午夜天堂精品久久久久| 成人97在线观看视频| 欧美三级黄色大片| 偷偷www综合久久久久久久| 中文字幕在线视频日韩| 一级二级黄色片| 日韩国产一区| 久久综合免费视频影院| 精品自拍偷拍视频| 午夜精品亚洲| 91国产精品视频在线| 精品美女久久久久| 日韩国产欧美视频| 国产欧美日韩中文字幕| 一级黄色片在线看| 国产精品123区| 成人在线视频网址| 污污的视频网站在线观看| 91在线观看下载| 日韩av一级大片| 免费a在线观看| 亚洲国产精华液网站w| 一本色道婷婷久久欧美| 超碰在线观看免费| 亚洲一区免费观看| 18禁免费无码无遮挡不卡网站| 三上悠亚国产精品一区二区三区| 日本精品免费观看高清观看| 久久婷婷综合色| 欧美久久亚洲| 日韩精品视频免费专区在线播放 | 少妇精品久久久一区二区| 中文字幕日韩欧美在线 | av电影在线网| 亚洲乱码国产乱码精品精的特点 | 国产盗摄一区二区| 欧美午夜女人视频在线| 在线观看av网页| 操欧美女人视频| 伊人精品在线观看| 精品在线视频观看| 免费永久网站黄欧美| 成人欧美在线观看| 天天综合天天色| 国产精品久久一卡二卡| 国产一区二区网| www欧美在线观看| 亚洲欧美国产制服动漫| 亚洲天堂黄色片| 久久久噜噜噜| 97自拍视频| 国产三级电影在线| 亚洲福利视频一区| 色啦啦av综合| 亚洲区小说区图片区qvod按摩 | 亚洲国产欧美日本视频| 欧美丰满少妇xxxxx高潮对白| 亚洲一级av无码毛片精品| 日韩视频在线观看| 26uuu亚洲国产精品| 国产乱码精品一区二区| 久久精品亚洲麻豆av一区二区| 91嫩草国产丨精品入口麻豆| 日韩欧美精品一区二区综合视频| 精品福利一二区| 成年人网站在线观看视频| 亚洲综合日本| 国产精品一区二区av| 午夜国产福利在线| 日韩欧美999| 在线精品视频播放| 亚洲精品a级片| 国产欧美欧洲在线观看| 青青草免费在线| 亚洲国产成人tv| 国产探花一区二区三区| 区一区二视频| 国产精品成人观看视频国产奇米| 四虎在线视频免费观看| 亚洲综合男人的天堂| 亚洲美女性囗交| 大胆日韩av| 国产成人精品综合| 毛片在线能看| 日韩欧美一区二区在线| 国模私拍在线观看| 国产精品地址| 国产91亚洲精品一区二区三区| 黄a在线观看| 91精品一区二区三区久久久久久| 极品蜜桃臀肥臀-x88av| 日av在线不卡| 亚欧精品在线| 热久久久久久| 精品国产欧美一区二区五十路| 特级西西444www高清大视频| 久久精品免视看| 别急慢慢来1978如如2| 狠狠色丁香婷婷综合影院| 欧美最顶级的aⅴ艳星| 中文字幕无线精品亚洲乱码一区| 国产91丝袜美女在线播放| 久久久久在线| 色播五月综合| 日本午夜免费一区二区| 最新亚洲国产精品| 97在线播放免费观看| 日韩一区有码在线| 国产精品久久久久久久99| 午夜久久福利| 国模精品娜娜一二三区| 伊人久久精品一区二区三区| 亚洲人成绝费网站色www| 无码人妻丰满熟妇精品区| 中文字幕精品在线不卡| 想看黄色一级片| 欧美日韩调教| 久久国产精品久久| 日韩av福利| 久久五月天色综合| 黄色www视频| 富二代精品短视频| 中文字幕成人动漫| 久久国内精品自在自线400部| 亚洲成年人专区| 荡女精品导航| 国产黑人绿帽在线第一区| 男人资源在线播放| 欧美电影精品一区二区| 国产又大又黑又粗免费视频| 久久视频一区二区| 国产高潮免费视频| 欧美日韩国产高清| 欧美裸体网站| 欧洲av无码放荡人妇网站| 国产精品久久久久久久久免费高清 | 在线播放麻豆| 日韩午夜精品电影| 国产成人无码一区二区在线播放| 国产精品美女一区二区| 中文字幕第六页| 视频一区欧美精品| 99久re热视频精品98| 少妇一区二区三区| 成人精品aaaa网站| 国产不卡人人| 按摩亚洲人久久| 视频福利在线| 日韩免费高清av| 中文av免费观看| 亚洲国产综合91精品麻豆| 久久久久亚洲AV成人无在| 成人免费视频播放| 日韩成人精品视频在线观看| 中国女人久久久| 欧美日韩中文字幕在线播放| 精品在线播放| 国产美女在线精品免费观看| 青青久久精品| 国产精品av免费在线观看| 成人在线app| 国产亚洲一区二区在线| 亚洲人成色777777精品音频| 91精品国产高清一区二区三区| 五月婷婷六月婷婷| 婷婷夜色潮精品综合在线| 曰本女人与公拘交酡| 国产精品久久久久久久久动漫| 免费观看av网站| 成人av网址在线观看| 久久无码人妻一区二区三区| 青青草一区二区三区| 日韩a在线播放| 亚洲第一在线| 国产精品久久久久久久乖乖| 97久久夜色精品国产| 日韩偷拍一区二区| 亚洲国产精品嫩草影院久久av| 国产伦精品一区二区三区视频黑人 | 熟女少妇一区二区三区| 99免费精品在线观看| 极品人妻一区二区| 国产美女主播视频一区| mm131国产精品| 免费看精品久久片| 黑人粗进入欧美aaaaa| 男人的天堂亚洲在线| 日韩精品在线中文字幕| 欧美日韩国产色综合一二三四| 亚洲自拍偷拍一区二区三区| 亚洲激情中文| 99re6这里有精品热视频| 亚洲成av人片乱码色午夜| 性欧美.com| 色综合天天爱| 国产又大又长又粗又黄| 亚洲女同另类| 欧美激情一区不卡| 国产男女无遮挡猛进猛出| 精品一区二区三区久久| 男人午夜视频在线观看| 国产在线国偷精品免费看| 黄色手机在线视频| 狠狠色丁香久久婷婷综| 爱豆国产剧免费观看大全剧苏畅 | 国产精品偷伦免费视频观看的| 国产另类xxxxhd高清| 国产精品嫩草影院一区二区| 香蕉久久一区| 成人区精品一区二区| 欧美精品国产白浆久久久久| 麻豆av一区二区三区| 国产麻豆一区二区三区精品视频| 神马影院一区二区| 婷婷综合亚洲| 蜜臀精品一区二区| 国产女优一区| 中文久久久久久| 国产乱码字幕精品高清av| 国产大学生视频| 久久久噜噜噜久噜久久综合| 国产精品成人国产乱一区| 日韩无码精品一区二区三区| 一区二区三区在线视频观看58| 麻豆成人在线视频| 欧美午夜女人视频在线| 在线视频 91| 精品国产露脸精彩对白| 青青草免费观看免费视频在线| 中文字幕国产精品| 四虎影视成人| 国产精品69av| 一区二区日韩| 欧美日韩一区二区三区在线观看免 | 久久久久久久久久久久国产| 午夜精品在线看| 伊人精品在线视频| 精品国产一区a| 尤物网在线观看| 欧美黑人一级爽快片淫片高清| 男人的天堂免费在线视频| 国产精品视频大全| 成人动漫视频| 亚洲精品一区二区三区av| 欧美日本一区二区高清播放视频| 欧美日韩激情视频在线观看| 麻豆freexxxx性91精品| 中文字幕在线播放视频| 国产精品久久久久久久久图文区| 免费中文字幕在线| 欧洲av一区二区嗯嗯嗯啊| 黑人精品一区二区三区| 色妞在线综合亚洲欧美| 在线成人av观看| 91久久极品少妇xxxxⅹ软件| 精品免费在线| 久久精品免费一区二区| 懂色av一区二区三区蜜臀| 亚洲毛片亚洲毛片亚洲毛片| 偷拍亚洲欧洲综合| 精品久久国产视频| 中文字幕亚洲欧美一区二区三区| 国产色播av在线| 99久久一区三区四区免费| 成人免费av| 日韩亚洲在线视频| 99精品一区二区| 久久9999久久免费精品国产| 6080午夜不卡| 日本中文字幕电影在线免费观看| 日韩免费av片在线观看| 女同久久另类99精品国产| 久久人妻无码一区二区| 国内精品久久久久影院色| 国产精品成人一区二区三区电影毛片 | 亚洲精品在线看| 爱啪视频在线观看视频免费| av日韩免费电影| 欧美日韩一卡| wwwww在线观看| 一级日本不卡的影视| 国产又粗又大又爽视频| 中文字幕亚洲第一| 素人啪啪色综合| 亚洲一区精彩视频| 麻豆精品一二三| 99久久99久久精品免费| 欧美天堂亚洲电影院在线播放| 男人天堂网在线观看| 欧美洲成人男女午夜视频| 日韩大尺度在线观看| 日本在线xxx| 2024国产精品| 波多野结衣一区二区三区在线| 亚洲欧洲偷拍精品| 亚洲风情在线资源| 日本午夜精品一区二区三区| 秋霞午夜av一区二区三区| 国产免费嫩草影院| 欧美久久高跟鞋激| 暖暖日本在线观看| 亚洲a∨日韩av高清在线观看| 亚洲综合色网| 香蕉久久久久久av成人| 亚洲午夜成aⅴ人片| 天天干天天操av| 国产成人91久久精品| 欧美精品尤物在线观看| 中文字幕 日韩 欧美| 一区二区三区色| 色丁香婷婷综合久久| 国产不卡av在线| 欧美亚洲国产精品久久| 亚洲免费黄色录像| 亚洲国产人成综合网站| 你懂的视频在线| 国产日韩精品在线观看| 国产精品mv在线观看| 一区二区三区少妇| 欧美亚洲综合一区| 91福利国产在线观看菠萝蜜| 韩日午夜在线资源一区二区| 久久综合亚州| 午夜激情福利网| 精品视频在线播放免| 国产精品诱惑| 99久久免费观看| 国产女主播视频一区二区| 精品人妻一区二区三区日产乱码| 97av视频在线| 99久久婷婷| 国产 中文 字幕 日韩 在线| 欧美色倩网站大全免费| 成人免费一区二区三区牛牛| 色阁综合av| 99热国产精品| 国产美女裸体无遮挡免费视频| 97成人精品区在线播放| 成人在线一区| bl动漫在线观看| 91精品国产全国免费观看| 中文字幕资源网在线观看免费| 一本一本a久久| 久久亚洲精品国产精品紫薇| 国产精品毛片久久久久久久av| 国产69精品久久久久久| 中文字幕免费精品|