也许有人可以帮助我解决以下问题:我想在 QGLWidget 中绘制 QImage 的内容,但小部件被涂成黑色。
class QGLCanvas {
public:
QGLCanvas(QWidget* parent) : QGLWidget(parent) {
}
void setImage(const QImage* image) {
img = image;
}
void paintEvent(QPaintEvent*) {
// From Painter Documentation Qt
QPainter p(this);
p.setRenderHint(QPainter::SmoothPixmapTransform, 1);
p.drawImage(this->rect(), *img);
p.end();
}
public slots:
void rgb_data(const void *data) {
memcpy((void *)img->bits(), data, img->byteCount()); // data will be copied (sizes are known)
// img.save("text.png"); // saves right image
this->update(); // calls repaint, but does not draw the image.
}
private:
QImage *img;
}
错误:当调用插槽时,内存被复制到图像中。如果图像被保存,则内容是正确的。但是 repaint 方法只是将黑色内容绘制到小部件。
修复:如果 memcpy 行在插槽外实现,则图像内容被绘制到小部件。此修复程序大大增加了代码复杂性。因此,我有以下问题:
问题:为什么 memcpy 在插槽中不起作用?这是 Qt 的普遍问题吗?