用qt画一个柱状图 不使用qtcharts
时间: 2024-03-15 17:17:06 浏览: 136
好的,以下是一个用Qt绘制柱状图的示例代码:
```cpp
#include <QApplication>
#include <QWidget>
#include <QPainter>
class BarChart : public QWidget
{
public:
BarChart(QWidget *parent = nullptr) : QWidget(parent)
{
setFixedSize(400, 300);
}
protected:
void paintEvent(QPaintEvent *) override
{
QPainter painter(this);
const int margin = 30;
const int barWidth = (width() - 2 * margin) / m_values.size() - 10;
const int maxValue = *std::max_element(m_values.begin(), m_values.end());
const int maxHeight = height() - 2 * margin;
painter.setPen(Qt::black);
painter.drawLine(margin, margin, margin, height() - margin); // y-axis
painter.drawLine(margin, height() - margin, width() - margin, height() - margin); // x-axis
for (int i = 0; i < m_values.size(); ++i)
{
int barHeight = static_cast<int>(m_values[i] * maxHeight / maxValue);
int x = margin + i * (barWidth + 10);
int y = height() - margin - barHeight;
QRect rect(x, y, barWidth, barHeight);
painter.fillRect(rect, Qt::blue);
painter.drawRect(rect);
}
}
public:
void setValues(const std::vector<int>& values)
{
m_values = values;
update();
}
private:
std::vector<int> m_values;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
BarChart chart;
chart.setValues({ 10, 20, 30, 40, 50 });
chart.show();
return a.exec();
}
```
在示例代码中,我们继承了QWidget类,并重写了paintEvent函数进行绘图。我们使用QPainter类来绘制柱状图。在paintEvent函数中,我们首先绘制了x轴和y轴。然后,我们根据数据值绘制柱状图。为了让柱状图看起来更好,我们给每个柱子留出了一定的空白。最后,我们通过调用update函数来刷新界面,使柱状图显示出来。
你可以根据需要修改该示例代码以满足你的需求。
阅读全文