qt - 动态 QImage ,当没有指定初始大小时

标签 qt paint qt4.8

我正在尝试使用 QPainter 将项目绘制到 QImage 上,但由于我无法预测此 QImage 的确切大小,所以我无法使用 QImage::save() ,它总是告诉我:

QPainter::begin: 绘图设备返回引擎 == 0,类型:3

但是如果我在声明此 QImage 时指定图像高度和宽度,则它可以顺利工作:

QImage 输出 = QImage (500, 500, QImage::Format_ARGB32);

最佳答案

QImageQPixmap等需要在开始绘制之前分配数据。使用QImage的默认构造函数不会分配任何内存,因此image.isNull() == true。因此,当您调用 QPainter::begin() (可能通过使用 QImage 创建一个作为绘画设备来间接调用)时,它无法绘制到任何内存中,因为它不是'在那里。

来自 QPainter::begin() 文档:

QPixmap image(0, 0);
painter->begin(&image); // impossible - image.isNull() == true;

所以在绘图之前你必须想出一个尺寸。在您的情况下,最好的办法是决定最大尺寸(或在可行的情况下计算一个),然后一旦您知道确切的尺寸 - 裁剪图像。

关于qt - 动态 QImage ,当没有指定初始大小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10930228/

相关文章:

c++ - QGLWidget 在 Windows 7 中显示为黑色

c++ - Qt 5 中的宏 "QT_BEGIN_NAMESPACE"是什么意思?

java - 多个 JPanel 在 JLayeredPane 中绘制图像

c++ - 如何从屏幕上实际删除 QGraphicsItem?

c++ - 非阻塞 worker - 中断文件复制

python - PyQt5 : widget not displayed after being added to layout

c++ - 用于散点图的排序浮点 vector (C++/QCustomPlot)

c# - 绘制文本时 XNA 怪异的 3D 绘制

java - paint() 和 paintcomponent() 的区别?