在《qt4精彩例項分析》中最後一章介紹了關於拖曳類的例程,但是有些不好理解。下面是我個人看完後的一些總結:
首先,關於拖曳有乙個拖曳的物件,還要有乙個盛拖曳物件的容器。所以至少要有兩個類。然後,要在拖曳物件中實現兩個事件:void
mousepressevent
(qmouseevent
*);
void
mousemoveevent
(qmouseevent
*);在這兩個事件中,分別對拖曳物件做相應的處理。事件處理中,有這麼幾個任務:
1.一般是要記錄物件拖曳的位置,物件本身的屬性資訊。這個過程要可能使用的類qbytearray,qdatastream,qmimedata;
eg:qbytearraydata
;qdatastream
stream
(&data
,qiodevice
::writeonly
);
stream
<<
pix<<
qpoint(e
->pos()-rect().topleft());
qmimedata
*mimedata
=new
qmimedata
;
mimedata
->setdata(
"drag-icon"
,data
);
2.使用qdrag,使用建立的拖曳物件能夠產生拖曳事件。
eg:qdrag*drag
=new
qdrag
(this
);drag
->setmimedata(
mimedata
);
drag
->sethotspot(
qpoint(e
->pos()
-rect().topleft()));
drag
->setpixmap(
pix);
qt::dropaction
dropaction
=drag
->start(
qt::
copyaction|qt
::moveaction
);//這是關鍵語句
3.處理拖曳時,拖曳物件原位置的顯示問題
hide();
qt::
dropaction
dropaction
=drag
->start(
qt::
copyaction|qt
::moveaction
);
if(dropaction
==qt
::moveaction
)
close();
else
show();
在拖曳時一般要隱匿原來位置的物件,所以先要呼叫hide();然後根據拖曳容器返回的拖曳動作,決定是接著隱匿還是將原來
位置的影象顯示出來。例如如果去掉if後面的語句,會造成原位置的物件不管怎麼樣,都不能顯示在原來的位置。
接著就是有關於盛放拖曳物件的容器
它一般要實現這麼三個事件: voiddragenterevent
(qdragenterevent
*);void
dragmoveevent
(qdragmoveevent
*);
void
dropevent
(qdropevent
*);
乙個是當有新的拖曳物件進入容器時,乙個是當容器內有拖曳物件移動時,乙個是當拖曳物件到新位置時滑鼠停下或鬆開時。按照《qt4精彩例項分析》
中的處理前兩個事件只是簡單的返回給拖曳類乙個拖曳動作,這樣好讓拖曳物件知道原位置的物件要不要再顯示。
eg:voiddragwidget
::dragenterevent
(qdragenterevent*e
)
else
e->acceptproposedaction();
}
}
但在dropevent(qdropevent
*)函式中它比上面的函式多了乙個任務,就是把拖曳物件在新位置中顯示出來。借助於qdropevent
類的例項攜帶的引數
可以輕鬆完成這個任務
eg: voiddragwidget
::dropevent
(qdropevent*e
)
else
e->acceptproposedaction();
}
else
e->ignore();
}
以上是我的一些粗淺直觀的認識,希望以後可以更深入更詳細地了解qt的拖曳類。
關於C 類中 this指標的理解
先要理解class的意思。class應該理解為一種型別,象int,char一樣,是使用者自定義的型別。雖然比int char這樣build in型別複雜的多,但首先要理解它們一樣是型別 用這個型別可以來宣告乙個變數,比如int x,myclass my等等。這樣就像變數x具有int型別一樣,變數my...
QT中關於JSON處理的幾個類
原文 qjsonobject類封裝了乙個json物件。乙個json物件是乙個包含了許多key value pair的列表。這裡的key都是unique string,而value都是qjsonvalue.乙個qjsonobject可以被轉換成乙個qvariantmap.可以用size 來獲得key ...
理解Qt多執行緒類
point 1 qthread類的例項與普通類的例項沒什麼不同,只是執行著的run 函式會不同 例1 在mdialog中,使用 在mdialog中使用 1.connect this,signal sigdialogsignal mythread,slot slotthreadslot 當emit s...