qt 用painter画直方图
时间: 2023-08-29 18:12:53 浏览: 134
在 Qt 中使用 QPainter 绘制直方图可以通过以下步骤实现:
1. 创建一个 QWidget 子类的窗口部件。
2. 在窗口部件中重写 paintEvent(QPaintEvent *event) 函数,在该函数中使用 QPainter 绘制直方图。
3. 使用 QPen 和 QBrush 设置绘制直方图所需要的线条和填充颜色。
4. 使用 drawRect() 函数绘制每个直方条。
5. 使用 drawText() 函数设置坐标轴上的文字。
下面是一个简单的代码示例:
```cpp
#include <QtWidgets>
class HistogramWidget : public QWidget
{
public:
HistogramWidget(QWidget *parent = nullptr) : QWidget(parent) {}
protected:
void paintEvent(QPaintEvent *event) override
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
// 设置画笔和画刷
QPen pen(Qt::black, 1);
painter.setPen(pen);
QBrush brush(Qt::blue);
painter.setBrush(brush);
// 绘制直方图
int values[] = {10, 20, 30, 40, 50};
int maxValue = 50;
QRect rect(50, 50, 200, 150);
painter.drawRect(rect);
int barWidth = rect.width() / 5;
for (int i = 0; i < 5; i++) {
int barHeight = rect.height() * values[i] / maxValue;
QRect bar(rect.left() + i * barWidth, rect.bottom() - barHeight, barWidth, barHeight);
painter.drawRect(bar);
}
// 绘制坐标轴文字
painter.drawText(rect.left() - 30, rect.top() - 10, "0");
painter.drawText(rect.right() + 10, rect.bottom(), QString::number(maxValue));
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
HistogramWidget widget;
widget.resize(300, 250);
widget.show();
return app.exec();
}
```
运行上述代码,将会显示一个简单的直方图窗口。你可以根据自己的需求进行更改和扩展。
阅读全文