qt繪制甘特圖

重寫paintEvent事件,代碼如下

```

void xx::paintEvent(QPaintEvent *event){

? QPainter painter(this);


? //繪制x,y軸,_maxWidth為y軸邊距

? painter.drawLine(QPoint(_maxWidth,20),QPoint(width(),20));

? painter.drawLine(QPoint(_maxWidth, 20), QPoint(_maxWidth,height()));

? //繪制刻度,_maxMinutes為x軸最大刻度

? int num = (_maxMinutes - _minMinutes) / 5;

? int interval = (width() - _maxWidth) / num;


? for (int index = 0; index != num;++index){

? ? painter.drawLine(QPoint(_maxWidth + index * interval, 20), QPoint(_maxWidth + index * interval, 15));

? ? painter.drawText(QPoint(_maxWidth + index * interval, 10), QString::number(_minMinutes + index*5));

? }

? num = _dataMap.size();

? interval = (height() - 20) / (num + 2);

? //繪制數(shù)據(jù)_dataMap,QString(y軸坐標名稱:起始時間-結束時間& 起始時間-結束時間)

? QMap<int, QString>::iterator it = _dataMap.begin();

? int index = 1;

? for (; it != _dataMap.end(); ++it){

? ? QStringList list = it.value().split(":");

? ? if (list.size() != 2) continue;

? ? painter.drawText(QPoint(0, 20 + interval * index), list[0]);

? ? painter.drawLine(QPoint(_maxWidth, 20 + interval * index), QPoint(_maxWidth? + 5, 20 + interval * index));

? ? for each (QString var in list[1].split("&")){

? ? ? if (var.isEmpty()) continue;

? ? ? QStringList interalList = var.split("-");

? ? ? if (interalList.size() != 2) continue;

? ? ? int x = (interalList[0].toDouble() / _maxMinutes) * (width() - _maxWidth);

? ? ? int x1 = (interalList[1].toDouble() / _maxMinutes) * (width() - _maxWidth);

? ? ? painter.drawLine(QPoint(_maxWidth + x, 20 + interval * index), QPoint(_maxWidth + x1, 20 + interval * index));

? ? }

? ? ++index;

? }

}

```

效果如下

已經(jīng)工作的程序員朋友可以關注下我的gzh“程序員成長日志”,分享日常工作中解決的問題即可賺取稿費,大家一起成長~

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 8月22日-----字符串相關 2-3 個性化消息: 將用戶的姓名存到一個變量中,并向該用戶顯示一條消息。顯示的消...
    future_d180閱讀 1,042評論 0 1
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 4,112評論 0 6
  • This chapter covers the basic setup for using this librar...
    ngugg閱讀 1,173評論 0 1
  • 記錄下項目中使用貝塞爾曲線實現(xiàn)可點擊查看價格功能 1.XML使用方式 android:id="@+id/cus...
    劇透下閱讀 999評論 0 5
  • 我喜歡的這個世界真吵,也喜歡我的世界真靜?!端烙谧蛉帐澜纭?書是一顆鉆出墳墓的大樹。 突然把我擊倒,是的,生活...
    胡壯壯Y閱讀 212評論 0 1

友情鏈接更多精彩內(nèi)容