QPainter 使用注意事项

QPainter 使用注意事项

最近创建了一个继承 QWidget 的窗口部件,使用 QPainter 绘制需要的内容,一部分在 paintEvent 中使用 QPainter,另一部分在自定义函数中使用 QPainter,发现运行时警告:
QWidget::paintEngine: Should no longer be called kernel……
QPainter::begin: Paint device returned engine == 0, type: 1 painting……

查找 QPainter 文档,发现如下事项:
Warning: When the paintdevice is a widget, QPainter can only be used inside a paintEvent() function or in a function called by paintEvent().

这才明白, QPainter 默认只能在 paintEvent 里面调用, 在别处绘制就会遇到警告。 另外, 在构造函数中设置 属性:

this->setAttribute(Qt::WA_PaintOutsidePaintEvent); 

是可以在paintEvent()之外绘制;
但不幸的是,该属性只支持X11,对于 Windows、Mac OS X、Embedded Linux 均不予支持。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QPainterQt中的一个图形绘制类,可以用于绘制各种图形、图标、图像等。下面是一个简单的QPainter使用教程: 1. 创建QPainter对象 在使用QPainter进行绘制之前,需要先创建一个QPainter对象。可以使用QWidget或QPixmap的成员函数来创建QPainter对象,例如: ```cpp QPainter painter(this); // 在QWidget中创建QPainter对象 QPainter painter(&pixmap); // 在QPixmap中创建QPainter对象 ``` 2. 设置画笔和画刷 在QPainter中,可以使用画笔和画刷来绘制各种形状和图像。画笔用于绘制边框,画刷用于填充内部。可以使用QPen和QBrush类来创建画笔和画刷,例如: ```cpp QPen pen(Qt::red, 2); // 创建一个红色的画笔,并设置线宽为2 QBrush brush(Qt::blue); // 创建一个蓝色的画刷 painter.setPen(pen); // 设置画笔 painter.setBrush(brush); // 设置画刷 ``` 3. 绘制图形 使用QPainter可以绘制各种图形,例如线段、矩形、椭圆、圆弧等。可以使用QPainter的成员函数来绘制这些图形,例如: ```cpp painter.drawLine(QPoint(0, 0), QPoint(100, 100)); // 绘制一条直线 painter.drawRect(QRect(50, 50, 100, 100)); // 绘制一个矩形 painter.drawEllipse(QRect(50, 50, 100, 100)); // 绘制一个椭圆 painter.drawArc(QRect(50, 50, 100, 100), 0, 90 * 16); // 绘制一个圆弧 ``` 4. 绘制文本 使用QPainter还可以绘制文本。可以使用QFont类来设置字体,使用QPainter的drawText函数来绘制文本,例如: ```cpp QFont font("Arial", 12, QFont::Bold); // 创建一个粗体Arial字体,字号为12 painter.setFont(font); // 设置字体 painter.drawText(QPoint(50, 50), "Hello, world!"); // 绘制文本 ``` 5. 绘制图像 如果想要在绘制中使用图像,可以使用QPixmap和QImage类来加载图像,然后使用QPainter的drawPixmap和drawImage函数来绘制图像,例如: ```cpp QPixmap pixmap("image.png"); // 加载一张图像 painter.drawPixmap(QRect(0, 0, 100, 100), pixmap); // 绘制图像 ``` 这就是一个简单的QPainter使用教程。当然,QPainter还有很多其他的绘制函数和选项,可以根据需要进行使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值