重寫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“程序員成長日志”,分享日常工作中解決的問題即可賺取稿費,大家一起成長~