当前位置: 首页 > article >正文

QPainter,QPen,QBrush详解

QPainter:画家
QPen:画笔,控制图形的边框轮廓
QBrush:画刷,控制图形的填充颜色样式
下面是用用QGraphicsItem来重写paint事件举例

#include <QGraphicsItem>
#include <QPainter>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QApplication>
#include <QWheelEvent>
class MyRectangleItem : public QGraphicsItem
{
public:
    MyRectangleItem() {
        // 设置矩形的位置和大小
        m_rect = QRectF(0, 0, 200, 100); // 矩形的初始位置和大小
    }

    // 必须重写 paint() 方法来绘制图形
    void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override {
        // 设置画笔颜色和填充颜色
        painter->setPen(Qt::red);         // 边框颜色为黑色
        painter->setBrush(QBrush(Qt::red, Qt::BrushStyle::Dense7Pattern));      // 填充颜色为黄色
        painter->drawRect(m_rect);          // 绘制矩形
    }

    // 返回图形项的边界矩形
    QRectF boundingRect() const override {
        return m_rect; // 返回矩形的边界矩形
    }

private:
    QRectF m_rect; // 存储矩形的位置和大小
};
class MyGraphicsView : public QGraphicsView
{
public:
    MyGraphicsView(QGraphicsScene* scene) : QGraphicsView(scene)
    {

    }

protected:
    // 重写滚轮事件,实现缩放
    void wheelEvent(QWheelEvent* event) override
    {
        // 使用滚轮进行缩放
        if (event->angleDelta().y() > 0)
            scale(1.2, 1.2);  // 放大
        else
            scale(0.8, 0.8);  // 缩小
    }
};

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    // 创建场景
    QGraphicsScene scene;
    // 创建自定义的矩形项
    MyRectangleItem* rectItem = new MyRectangleItem();
    // 将矩形项添加到场景中
    scene.addItem(rectItem);

    // 创建视图并设置场景
    MyGraphicsView view(&scene);
    view.setRenderHint(QPainter::Antialiasing); // 开启抗锯齿
    view.setRenderHint(QPainter::SmoothPixmapTransform); // 平滑图像变换
    view.resize(400, 300);
    view.show();

    return app.exec();
}

给QPainter设置QPen和QBrush对象即可进行绘制
在这里插入图片描述
Qt::BrushStyle::Dense7Pattern控制画刷样式为一系列小圆点,有各种样式都可以设置

对于普通widget,可以重写paintEvent事件来进行绘制

#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
class MyWidget : public QWidget
{

public:
    MyWidget(QWidget* parent = nullptr) : QWidget(parent) {
        // 设置窗口的大小
        setFixedSize(400, 300);
    }

protected:
    void paintEvent(QPaintEvent* event) override {
        // 创建 QPainter 对象
        QPainter painter(this);

        // 设置绘制颜色(例如:红色)
        painter.setBrush(Qt::red); // 设置填充颜色
        painter.setPen(Qt::black); // 设置边框颜色

        // 绘制矩形 (x, y, width, height)
        painter.drawRect(50, 50, 200, 100); // 绘制矩形
    }
};

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    MyWidget w;
    w.show();

    return app.exec();
}

QPainter的构造函数传入的对象为QPaintDevice,意为在哪个设备上绘制,当前widget即为绘制对象。


http://www.kler.cn/a/470369.html

相关文章:

  • C++list
  • Java 日期时间格式化标准
  • LRU(1)
  • 【UI自动化测试】selenium八种定位方式
  • http源码分析
  • 如何删除 Docker 中的悬虚镜像?
  • Ruby语言的数据结构
  • 微信小程序中调用阿里云 OSS(Object Storage Service)上传文件
  • 微软发布2025年AI预测:AI Agents将彻底改变工作方式
  • Ant Design Pro写项目的总结经验(react)
  • Redis中的Red Lock/Redis锁
  • K8s集群中,Worker 节点误执行了 kubeadm init
  • ip属地不是唯一的吗怎么改
  • Vue笔记-001-声明式渲染
  • macOS 安装 python3.11
  • Java基础知识-面试题
  • 智能服装推荐系统 协同过滤余弦函数推荐服装 Springboot Vue Element-UI前后端分离
  • react vscode prettier 格式化代码
  • 数据结构 - blocks
  • freertos官网源码烧录stlink注意配置
  • javascript e.preventDefault() 的作用和用法
  • Unity3D仿星露谷物语开发18之添加道具到库存栏
  • 按键精灵ios脚本教程:用函数来实现将图片保存到相册
  • Elasticsearch VS Easysearch 性能测试
  • Golang学习笔记_18——接口
  • 海外云服务器能用来做什么?