Qt如何創建可以選控的曲線部件?
在QGraphicsView裡面,item好像只能是矩形,這樣的話想創建線條形狀的item似乎邊界太大了,如果線條太多,明明看著沒有重疊,但是邊界卻重疊了。那麼想創建一條可以被選中拖控的曲線要怎麼做呢?要求精確度要高一點,至少看起來滑鼠應該是點在了曲線上的。
不需要QGraphicsView,直接一個裸的QWidget就行了。
重載mousePressEvent、mouseMoveEvent、mouseReleaseEvent、paintEvent。
在mousePressEvent中,當滑鼠左鍵按下時,判斷pos是否位於線條上,是的話就啟動坐標更新。
在mouseMoveEvent中,若坐標更新已啟動把滑鼠當前pos存下來。
在paintEvent里用QPainter::drawPath手動畫線,線條參數跟著滑鼠pos走就行了。
在mouseReleaseEvent中,若鬆開滑鼠左鍵,則停止坐標更新。
當然,如果想要類似visio那樣,和其他部件進行交互的話,用QGraphicsItem來製作也不錯。
具體如何將滑鼠坐標和曲線參數對應起來,請查看貝塞爾曲線_百度百科。
word、visio、畫圖裡的曲線都是用這個演算法繪製的
先問是不是,再問為什麼=。=
item好像只能是矩形????
QGraphicsRectItem,矩形;
QGraphicsEllipseItem ,橢圓;
QGraphicsTextItem ,文本;
至於線條形狀的話,自己去繼承QGraphicsItem重寫吧。
明明看起來沒有重疊,但是邊界重疊了,我記得這個東西有碰撞檢測函數的。
這玩意兒適合做思維導圖類的軟體。Qt4 GUI編程那本書中我記得有例子。
多百度Google下也比我這回答快。
具體怎麼重寫參考官方文檔吧。
只用過qwt,他可以滿足你的要求
推薦閱讀:
※如何用 C++ 在 GUI 中畫出各種平衡樹插入刪除的動態變化?
※Qt多線程編程中子線程如何調用主線程中的成員變數?
※用Qt5的Qpainter畫視頻解碼的圖像,發現CPU佔用極高(50%),有方法能夠降低cpu佔用嗎?
※MFC、Qt、WPF?該用哪個?