精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲欧美综合图区| 成人99免费视频| 北条麻妃一区二区三区中文字幕| 欧美亚洲激情在线| 水蜜桃av无码| 超碰这里只有精品| 亚洲国产色一区| 亚洲免费一在线| 亚洲欧洲av色图| 欧美激情2020午夜免费观看| 最新中文字幕视频| 国产午夜亚洲精品一级在线| 粉嫩av一区二区三区免费野| 一级日韩一区在线观看| 日本国产在线观看| 日韩电影一区二区三区四区| 久久久久久久999| 国产jjizz一区二区三区视频| 日本精品国产| 欧美日韩精品欧美日韩精品| 免费在线观看亚洲视频| 91一区二区三区在线| 久久精品一区四区| 国产一区免费在线| 精品免费久久久| 蜜桃av一区二区| 青青久久aⅴ北条麻妃| 国产精品a成v人在线播放| 97精品视频在线看| 中文国产亚洲喷潮| 公侵犯人妻一区二区三区| 国产欧美啪啪| 欧美电影免费观看完整版| 国产福利精品一区二区三区| 日韩网站中文字幕| 狠狠躁18三区二区一区| 免费一级特黄毛片| segui88久久综合| 中文字幕日韩欧美一区二区三区| 日韩欧美视频一区二区| 欧洲毛片在线| 2021国产精品久久精品| 久久精品国产综合精品| 日韩中文字幕免费在线观看| 国产成人免费视频| 91传媒视频免费| 国产情侣av在线| 国产剧情av麻豆香蕉精品| 国产情人节一区| 91禁在线观看| 精品亚洲成a人| 国产日韩在线观看av| 中文字幕欧美色图| 喷白浆一区二区| 国产精品久久久久久久一区探花 | 女同另类激情重口| 337p日本欧洲亚洲大胆精品| 黄色录像a级片| 日本亚洲不卡| 亚洲深夜福利网站| 国产精成人品免费观看| 色一区二区三区四区| 色青青草原桃花久久综合| 四虎影视1304t| 亚洲91视频| 欧美日韩第一视频| 99久在线精品99re8热| 蜜桃视频一区| 国产一区二区在线免费视频| 888奇米影视| 国产电影一区在线| 美女主播视频一区| 99精品老司机免费视频| 亚洲免费伊人电影| 肉大捧一出免费观看网站在线播放| 2024最新电影免费在线观看| 五月婷婷欧美视频| 搡女人真爽免费午夜网站| 一区二区三区无毛| 精品不卡在线视频| 手机免费看av| 欧美福利影院| 欧美一性一乱一交一视频| 中国一级片黄色一级片黄| 狠狠久久亚洲欧美| 国产无套精品一区二区| 国产视频福利在线| 亚洲乱码国产乱码精品精可以看| 18岁网站在线观看| 日韩综合av| 亚洲国产精品热久久| 国产精成人品免费观看| 国内在线观看一区二区三区| 国产va免费精品高清在线| 国产又粗又猛又黄又爽| k8久久久一区二区三区| 一区二区三区四区免费视频| 成入视频在线观看| 欧美夫妻性生活| 国产精品揄拍100视频| 亚洲综合色网| 国产成人精品综合| 亚洲精品久久久久久无码色欲四季 | 51精品秘密在线观看| 老司机免费视频| 国产精品毛片一区二区在线看| 国内精品久久久久伊人av| 在线视频播放大全| wwwwww.欧美系列| 日本免费成人网| 成人免费毛片嘿嘿连载视频…| 亚洲精品一区二区三区在线观看| 亚洲熟女少妇一区二区| 免费亚洲婷婷| 国产66精品久久久久999小说| 最新97超碰在线| 日韩欧美国产骚| 久久性爱视频网站| 欧美jizzhd精品欧美巨大免费| 国产精品日韩精品| 日本亚洲欧美| 午夜精品视频在线观看| 自拍偷拍激情视频| 国产精品久久久久蜜臀| 国产精品极品美女粉嫩高清在线| 西西人体44www大胆无码| 亚洲综合区在线| 亚洲综合伊人久久| 国产精品久久久久久久| 国产日韩av高清| 成人av电影观看| 色综合久久久久| 9.1成人看片| 亚洲激情网站| 国产亚洲二区| 天堂av中文在线观看| 亚洲第一区中文字幕| 麻豆91精品91久久久| 国产伦精一区二区三区| 免费观看中文字幕| 国产一区二区三区免费在线| 日韩在线不卡视频| 国产一区二区自拍视频| 亚洲婷婷在线视频| 五月六月丁香婷婷| 亚洲精品a级片| 3d蒂法精品啪啪一区二区免费| 伦xxxx在线| 日韩一区二区在线看| 天天综合天天做| 国产成人免费视频精品含羞草妖精 | 国产精自产拍久久久久久蜜| 午夜伦全在线观看| 91精品国产综合久久久蜜臀粉嫩| 欧洲第一无人区观看| 国产精一区二区三区| 日本老太婆做爰视频| jizzjizzjizz欧美| 91精品国产色综合久久不卡98| 婷婷伊人综合中文字幕| 欧美午夜片欧美片在线观看| 国产美女永久免费无遮挡| 久久精品国产色蜜蜜麻豆| 国产高清精品软男同| 日韩精品一区二区三区中文在线| 欧美精品久久久久久久| 性插视频在线观看| 在线观看国产一区二区| 欧美精品久久久久久久久46p| 国产精品一区免费视频| 黄色大片在线免费看| 国产成人三级| 成人精品在线观看| wwwwxxxx在线观看| 亚洲欧洲高清在线| 国产一区二区自拍视频| 亚洲成av人片一区二区| 一色道久久88加勒比一| 黑人巨大精品欧美黑白配亚洲| bt天堂新版中文在线地址| 偷拍亚洲精品| 成人淫片在线看| 欧美a级在线观看| 丝袜亚洲另类欧美重口| 亚洲国产精彩视频| 日本高清成人免费播放| 在线免费观看亚洲视频| 26uuu精品一区二区三区四区在线| 91精品无人成人www| 亚洲一本视频| 亚洲黄色一区二区三区| 国产精品chinese在线观看| 国产精品视频网址| 成人高潮aa毛片免费| 永久免费精品影视网站| 亚洲奶汁xxxx哺乳期| 欧美午夜视频网站| 国产中文字幕免费| 中文字幕日韩一区| 日本aaa视频| 国产精品一区二区视频| 激情五月亚洲色图| 亚洲小说欧美另类社区| 中文字幕中文字幕一区三区| 亚洲成a人片77777在线播放| 亚洲一区二区三区乱码aⅴ| 成人做爰视频www网站小优视频| 欧美大胆在线视频| 91社区在线高清| 日韩hd视频在线观看| www夜片内射视频日韩精品成人| 91福利视频网站| 国产精品美女久久久久av爽| 亚洲免费视频中文字幕| 亚洲天堂精品一区| 久久久www成人免费毛片麻豆| 日本性生活一级片| 国产一区亚洲一区| 激情 小说 亚洲 图片: 伦| 亚洲日本久久| av在线com| 亚洲精品网址| 亚洲乱码国产乱码精品天美传媒| 精品在线手机视频| 九色91视频| 国产精品15p| 成人9ⅰ免费影视网站| 国产美女亚洲精品7777| 国产精品免费一区二区三区都可以| 2022成人影院| 欧美在线视频一区| 性欧美xxx69hd高清| 午夜欧美不卡精品aaaaa| 国内小视频在线看| 欧美精品做受xxx性少妇| av在线app| 久久手机免费视频| 国产激情在线| 久久91精品国产| 18网站在线观看| 欧美刺激性大交免费视频| a视频在线播放| 欧美福利在线观看| 国产经典三级在线| 国内精品视频在线| 高潮在线视频| 欧美性一区二区三区| 成人线上视频| 国产福利成人在线| 欧美一级做一级爱a做片性| 91精品久久久久久久久久久久久久| 九九热这里有精品| 成人午夜在线观看| 77成人影视| 国产在线一区二区三区播放| 天海翼亚洲一区二区三区| 免费在线观看91| 郴州新闻综合频道在线直播| 永久免费精品视频网站| 中文字幕免费一区二区三区| a天堂资源在线观看| 99在线|亚洲一区二区| 茄子视频成人免费观看| 久久一二三区| 91高清国产视频| 国产成人av一区| 亚洲av无码国产精品久久| 久久久99精品免费观看不卡| 四虎影视1304t| 一区二区高清视频在线观看| 自拍偷拍欧美亚洲| 欧美三级资源在线| www.黄色av| 亚洲免费av电影| 国产精品剧情一区二区在线观看| 欧美激情欧美狂野欧美精品| 美女日韩欧美| 亚洲精品免费网站| 日韩av网站在线免费观看| 四虎永久国产精品| 欧美特黄一区| 国产视频一区二区视频| 国产一区二区日韩精品| 性囗交免费视频观看| 国产欧美日韩不卡| 国产suv一区二区三区| 欧美性生交大片免费| 一二三区在线播放| 一区二区高清| 中文字幕日韩一区| 久久久在线免费观看| 日韩免费高清在线| 五月色婷婷综合| 国内精品久久久久久久97牛牛 | 97久久精品人人做人人爽| 欧美精品一区二区三区蜜臀| 日本一区视频在线| 爱草tv视频在线观看992| 国产精品久久久久国产a级| 久久视频社区| 清纯唯美一区二区三区| 黄色成人av网站| 亚洲精品自拍网| 91一区一区三区| 真实国产乱子伦对白在线| 在线观看视频91| 香蕉视频免费看| 久久91精品国产91久久久| 成人黄色在线| 狼狼综合久久久久综合网| 国产精品大片| www.午夜av| 亚洲国产精品精华液ab| www..com国产| 欧美v日韩v国产v| 二区三区在线观看| 国产精品自产拍在线观看中文 | 免费成人性网站| 97人妻天天摸天天爽天天| 亚洲精品成人精品456| 又色又爽又黄无遮挡的免费视频| 亚洲美女视频网| 国产精品25p| 国产精品精品软件视频| 中文字幕亚洲综合久久五月天色无吗'' | 久久影院亚洲| 中文字幕在线免费看线人| 天天综合日日夜夜精品| 超碰福利在线观看| 免费不卡欧美自拍视频| 99er精品视频| 国产系列第一页| 精品一二三四在线| 激情五月激情综合| 欧美日韩在线亚洲一区蜜芽| 成人18在线| 国产欧美亚洲精品| 国产精品国产一区| 欧洲美女亚洲激情| 亚洲视频在线一区观看| 国产精品无码久久久久成人app| 中文字幕日韩高清| 四虎影视国产精品| 一区二区三区在线视频看| 久久99国产精品久久99| 成年人二级毛片| 欧美一区二区三区精品| 蜜桃传媒在线观看免费进入| av成人综合网| 亚洲免费高清| 中文字幕5566| 欧美在线视频你懂得| 视频一区二区三区不卡| 91在线直播亚洲| 欧美有码视频| 朝桐光av一区二区三区| 色噜噜狠狠成人中文综合| 波多野结衣在线影院| 成人看片人aa| 韩国亚洲精品| 久久人人爽人人爽人人片| 91福利资源站| 成人高清免费在线| 国产久一道中文一区| 亚洲一区亚洲| 欧美日韩国产一二三区| 日韩欧美一二区| 小h片在线观看| 亚洲国产精品久久久久久女王| 久草精品在线观看| 精品午夜福利在线观看| 亚洲欧美日韩国产精品| 日韩成人在线一区| 欧美乱大交xxxxx潮喷l头像| 久久这里只有精品视频网| 中文字幕人成人乱码亚洲电影| 欧美巨乳在线观看| 美女精品一区最新中文字幕一区二区三区 | 88xx成人免费观看视频库 | 国产成人福利在线| 91精选在线观看| 丝袜老师在线| 99re99热| 91蜜桃在线免费视频| 夜夜嗨aⅴ一区二区三区| 久久久久久久91| 成人精品久久| 亚洲精品第二页| 欧美日韩中文另类| av免费不卡| 不卡中文字幕在线| 久久中文字幕电影| 亚洲高清视频网站| 国产精品久久久久久久久久| 亚洲无线视频| 娇小11一12╳yⅹ╳毛片| 亚洲黄色av网站| 国产精品一区二区美女视频免费看 | 国产午夜精品一区| 国产一区亚洲一区|