Qt:制作不同颜色的堆叠条形图

时间:2013-12-27 13:31:16

标签: c++ qt colors qpainter qtgui

我正在尝试在Qt中制作一个时间轴,其中不同的颜色代表不同的任务。 最终,它应该看起来有点像这样(但只有一行);

stacked

现在任何人都有任何想法如何在不安装额外库的情况下执行此操作,但只是使用QPaint? 它所代表的数据存储在一个自定义的结构中。

欢迎任何帮助。

THX!

2 个答案:

答案 0 :(得分:1)

您似乎需要类似下面的代码,但请注意它只是伪代码,具体细节很大程度上取决于您如何从数据结构中获取尚未与我们共享的数据。

...
QPainter *painter = new QPainter(MyPaintDevice); // MyPaintDevice could be even 'this'
QPen pen(Qt::gray, 2);
painter->setPen(pen);
int currentX = 0;
const int currentY = 0;
const int height = hardCodedValue; // Coming from some static data initialization

foreach (const Settings& settings, settingsList) {
    QBrush brush(QColor(settings.colorString()));
    painter->setBrush(brush);
    painter->drawRect(currentX, currentY, settings.width(), height);
    currentX += settings.width();
}
...

不可否认,出于多种原因,最好选择QML而不是旧的QPainter引擎。这是硬件加速,而不是软件光栅化作为QPainter方法,但可能更重要的是你:它更简单。

您需要查看native Rect qml element,可能还需要查看Repeater

答案 1 :(得分:0)

您可以继承Qwidget,并至少重新定义paintEvent(QPaintEvent * event)resizeEvent(QResizeEvent * event)

我假设您的小部件包含QRectQColor对的初始列表。当发生调整大小事件时,您使用基本相对算术计算QRect的渲染列表。甚至出现油漆时,您可以使用此渲染列表来填充颜色。

您甚至可以允许使用鼠标事件修改颜色以进行一些整洁的渲染。

所有这些都可以用Qml完成,甚至可以更容易。