Qt画笔与画刷

Qt绘图系统介绍

Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice和QPaintEngine这三个类.

QPainter用来执行绘图操作; QPaintDevice提供绘图设备,它是一个二维空间的抽象,可以使用QPainter在其上进行绘制; QPaintEngine提供了一些接口,可以用于QPainter在不同的设备上进行绘制。

在Qt绘图系统中,由QPainter来完成具体的绘制操作。QPainter一般在一个部件的重绘事件(Paint Event)的处理函数paintEvent()中进行绘制:

首先要创建QPainter对象;然后进行图形的绘制;最后销毁QPainter对象。

QPainter使用方式

1.QPainter构造函数中,parent指定绘图对象(设备);QPainter构造函数中自动调用begin函数,表明绘图开始,在QPainter的析构函数中调用end()函数结束绘制。

    QRectF rectangle(10.0, 20.0, 80.0, 60.0);
    int startAngle = 30 * 16;
    int spanAngle = 120 * 16;
    QPainter painter(this);
    painter.drawArc(rectangle, startAngle, spanAngle);

2.构造时,不在构造函数中指定parent(绘图对象);显示调用begin(parent)指定绘图设备。

绘图结束时,显示调用end()函数。

    QRectF rectangle(10.0, 20.0, 80.0, 60.0);
    int startAngle = 30 * 16;
    int spanAngle = 120 * 16;
    QPainter painter;
    painter.begin(this); //指定设备
    painter.drawArc(rectangle, startAngle, spanAngle);
    painter.end();

画笔与画刷

画笔指定图案的轮廓的样式

画刷指定图案的填充样式

画笔使用

    //使用画笔,设置画笔的风格
    QPen pen(Qt::red,6, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin);
    painter.setPen(pen);
    painter.drawArc(rectangle, startAngle, spanAngle);

画刷使用

    // 创建画刷,设置画刷的风格
    QBrush brush(QColor(0, 0, 255), Qt::Dense4Pattern);
    // 使用画刷
    painter.setBrush(brush);
    // 绘制椭圆
    painter.drawEllipse(220, 20, 50, 50);

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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(); } ``` 运行上述代码,将会显示一个简单的直方图窗口。你可以根据自己的需求进行更改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值