Qt之使用GraphicsView框架實(shí)現(xiàn)思維導(dǎo)圖的示例
一、簡(jiǎn)述
我們常見的思維導(dǎo)圖類型XMind軟件,功能十分強(qiáng)大,提供了各式各樣的導(dǎo)圖樣式、形式,那我們可以用Qt實(shí)現(xiàn)思維導(dǎo)圖的功能嗎,答案肯定是可以的,用圖說明。
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ù)庫)


線條繪制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語言定義字符串?dāng)?shù)組簡(jiǎn)單代碼示例
在C語言中字符串?dāng)?shù)組是用來存儲(chǔ)多個(gè)字符串的,可以通過字符數(shù)組或指針數(shù)組的方式定義,這篇文章主要介紹了C語言定義字符串?dāng)?shù)組的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-11-11
純c語言實(shí)現(xiàn)面向?qū)ο蠓治雠c示例分享
采用C語言實(shí)現(xiàn)的關(guān)鍵是如何運(yùn)用C語言本身的特性來實(shí)現(xiàn)多態(tài)、繼承面、封裝的面向?qū)ο蟮奶卣?最近給出了例子,大家可以參考使用2014-01-01
Qt?關(guān)于容器的遍歷迭代器的使用問題小結(jié)
Qt是一個(gè)跨平臺(tái)的 C++ 開發(fā)庫,主要用來開發(fā)圖形用戶界面程序,當(dāng)然也可以開發(fā)不帶界面的命令行程序,本文重點(diǎn)給大家介紹Qt?關(guān)于容器的遍歷迭代器的使用問題小結(jié),感興趣的朋友一起看看吧2022-03-03
c語言中回調(diào)函數(shù)的使用以及實(shí)際作用詳析
C語言詳細(xì)分析貪心策略中最小生成樹的Prime算法設(shè)計(jì)與實(shí)現(xiàn)

