Qt之使用GraphicsView框架實(shí)現(xiàn)思維導(dǎo)圖的示例
一、簡(jiǎn)述
我們常見(jiàn)的思維導(dǎo)圖類(lèi)型XMind軟件,功能十分強(qiáng)大,提供了各式各樣的導(dǎo)圖樣式、形式,那我們可以用Qt實(shí)現(xiàn)思維導(dǎo)圖的功能嗎,答案肯定是可以的,用圖說(shuō)明。
1、靜態(tài)方式
讀取本地?cái)?shù)據(jù)的方式進(jìn)行展示。
2、優(yōu)化
(1)增加選中效果
(2)優(yōu)化連接線條
3、動(dòng)態(tài)方式
(1)可自由添加/刪除節(jié)點(diǎn)
(2)雙擊可重命名節(jié)點(diǎn)
(3)可折疊節(jié)點(diǎn)
(4)每層節(jié)點(diǎn)顏色可自定義
(5)支持xml格式數(shù)據(jù)的保存/讀取(可拓展為其他格式或數(shù)據(jù)庫(kù))
線條繪制Code
void LineTest::paintEvent(QPaintEvent *event) { QPoint startPoint = m_startPoint; QPoint endPoint = m_endPoint; int hSpace = 15; int radius = 8; QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); painter.setPen(QPen(Qt::gray, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); // 判斷是上弧線還是下弧線; if (endPoint.y() < startPoint.y()) { // 繪制橫線; painter.drawLine(startPoint, startPoint + QPoint(hSpace, 0)); // 繪制豎線; startPoint += QPoint(hSpace, 0); QPoint vTopPoint = QPoint(startPoint.x(), endPoint.y() + radius); painter.drawLine(startPoint, vTopPoint); // 繪制上弧線; startPoint = vTopPoint; QPoint hTopPoint = QPoint(startPoint.x() + radius, endPoint.y()); QPainterPath path(startPoint); // 繪制貝塞爾三次曲線; QPointF c1 = QPointF(startPoint.x(), hTopPoint.y()); QPointF c2 = QPointF(startPoint.x() + 2, hTopPoint.y() + 2); path.cubicTo(c2, c2, hTopPoint); painter.drawPath(path); // 繪制橫線; startPoint = hTopPoint; painter.drawLine(startPoint, endPoint); } else if (endPoint.y() > startPoint.y()) { // 繪制橫線; painter.drawLine(startPoint, startPoint + QPoint(hSpace, 0)); // 繪制豎線; startPoint += QPoint(hSpace, 0); QPoint vBottomPoint = QPoint(startPoint.x(), endPoint.y() - radius); painter.drawLine(startPoint, vBottomPoint); // 繪制下弧線; startPoint = vBottomPoint; QPoint hBottomPoint = QPoint(startPoint.x() + radius, endPoint.y()); QPainterPath path(startPoint); // 繪制貝塞爾三次曲線; QPointF c1 = QPointF(startPoint.x() + 2, hBottomPoint.y() - 2); QPointF c2 = QPointF(startPoint.x() + 2, hBottomPoint.y() + 2); path.cubicTo(c1, c1, hBottomPoint); painter.drawPath(path); // 繪制橫線; startPoint = hBottomPoint; painter.drawLine(startPoint, endPoint); } else { // 繪制直線; painter.drawLine(startPoint, endPoint); } }
目前只實(shí)現(xiàn)了初步導(dǎo)圖的基礎(chǔ)功能,后續(xù)會(huì)增加更多的樣式選擇及拓展。
到此這篇關(guān)于Qt之使用GraphicsView框架實(shí)現(xiàn)思維導(dǎo)圖的示例的文章就介紹到這了,更多相關(guān)Qt GraphicsView思維導(dǎo)圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)解析csv格式文件的示例代碼
CSV,有時(shí)也稱(chēng)為字符分隔值,其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本),本文為大家整理了C語(yǔ)言解析csv文件的方法,需要的可以參考一下2023-06-06C++ push方法與push_back方法常見(jiàn)方法介紹
push與push_back是STL中常見(jiàn)的方法,都是向數(shù)據(jù)結(jié)構(gòu)中添加元素,本文還將簡(jiǎn)述push對(duì)應(yīng)的stack與queue系列,常見(jiàn)方法的介紹,以及與push_back相對(duì)應(yīng)的vector系列常見(jiàn)方法介紹,感興趣的朋友跟隨小編一起看看吧2022-11-11

C++實(shí)現(xiàn)將數(shù)據(jù)寫(xiě)入Excel工作表的示例代碼

關(guān)于C++動(dòng)態(tài)分配內(nèi)存的介紹

C語(yǔ)言中的內(nèi)聯(lián)函數(shù)(inline)與宏定義(#define)詳細(xì)解析