2008年10月20日 星期一

QT - drag and drop


以上就是這一個範例程式的介面~
共會有三個這個介面,可以由其中一個拖曳到另一個DropSite~
DropSite就是要讓別人拖曳到的地方。
Secret Source可以拖曳到DropSite,會出現the secret number is X,但是拖曳到其它地方,滑鼠會出現禁止的符號~

QStoredDrag::QStoredDrag ( const char * mimeType, QWidget * dragSource = 0, const char * name = 0 )

mineType應該是說此Drop有支援mimeType這一個類型


void QWidget::setAcceptDrops ( bool on ) [virtual]

設置對於這個窗口元件按滑鼠事件是否生效為on。


void QWidget::dragEnterEvent ( QDragEnterEvent * ) [virtual protected]

當一個拖動正在進行並且鼠標進入這個窗口元件,這個事件處理器被調用

QDragObject Class
用來封裝:主要是用來當在application與application之間拖曳、或是使用在剪貼功能上


QDropEvent::Action
QDropEvent::Copy - The default action. The source simply uses the data provided in the operation.
QDropEvent::Link - The source should somehow create a link to the location specified by the data.
QDropEvent::Move - The source should somehow move the object from the location specified by the data to a new location.
QDropEvent::Private - The target has special knowledge of the MIME type, which the source should respond to in a similar way to a Copy.

預設值是Copy,也就是說,當由一個地方拖曳到另一個地方,是會在新的地方建立一個新的元件


const char * QDropEvent::format ( int n = 0 ) const [virtual]

傳回目前的drag可以支援的型式

通用資源標誌符(Uniform Resource Identifier, 簡稱"URI")是互聯網的一個協議要素,可以通過它來定位任何遠程或本地的可用資源(這些資源通常包括HTML文檔、圖像、視頻片段、程序等)。


QStoredDrag::QStoredDrag ( const char * mimeType, QWidget * dragSource = 0, const char * name = 0 )

設定要解碼的mimeType,它可以解QDragObject之類的封包


bool QDropEvent::provides ( const char * mimeType ) const [virtual]

判斷是否有支援mimeType這一類的QDragObject

這一個例子中,在dropsite.h中,有宣告一個signals function,
但是,沒有實作這一個function,
只有在main.cpp中,透過

QObject::connect( d, SIGNAL(message(const QString&)),format, SLOT(setText(const QString&)) );

實作這一個function,
我的感覺就變成,其實,message這一個function就是setText的別名啦~當執行message,就會執行setText這一個function

=======================================================

其實在良葛格學習筆記中,dragdrop有一個例子非常的清楚,只是沒有說明如何自定dragobject。

主要會用到的function有:
mousePressEvent
dragEnterEvent
dropEvent
dragLeaveEvent

沒有留言: