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?該用哪個?

TAG:QtC開發框架 | 窗口 | QtProject |