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);

  //绘制数据_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;

  }

}

```

效果如下

已经工作的程序员朋友可以关注下我的gzh“程序员成长日志”,分享日常工作中解决的问题即可赚取稿费,大家一起成长~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 8月22日-----字符串相关 2-3 个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消...
    future_d180阅读 4,553评论 0 1
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 9,375评论 0 6
  • This chapter covers the basic setup for using this librar...
    ngugg阅读 4,699评论 0 1
  • 记录下项目中使用贝塞尔曲线实现可点击查看价格功能 1.XML使用方式 android:id="@+id/cus...
    剧透下阅读 4,483评论 0 5
  • 我喜欢的这个世界真吵,也喜欢我的世界真静。——《死于昨日世界》 书是一颗钻出坟墓的大树。 突然把我击倒,是的,生活...
    胡壮壮Y阅读 1,405评论 0 1

友情链接更多精彩内容