【发布时间】:2019-07-26 07:26:19
【问题描述】:
我对本书示例和我的版本的区别感到困惑。 Qt 版本 5.12.0
如示例所示:
从我的输出中可以看出:
首先,目标和源 In/Atop 模式的图片不同。而且,另一个值得注意的事情是,我们可以将矩形视为两个之间的附加层。
创建标签的代码:
QLabel* lblCreate(const QPainter::CompositionMode& mode){
QLabel* lbl = new QLabel;
lbl->setFixedSize(100, 100);
QRect rect(lbl->contentsRect());
QPainter painter;
// create first image
QImage sourceImage(rect.size(), QImage::Format_ARGB32_Premultiplied);
painter.begin(&sourceImage);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setBrush(QColor(0, 255, 0));
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
// draw triangle
painter.drawPolygon(QPolygon() << rect.bottomLeft()
<< QPoint(rect.center().x(), 0)
<< rect.bottomRight());
painter.end();
// create second image
QImage resultImage(rect.size(), QImage::Format_ARGB32_Premultiplied);
painter.begin(&resultImage);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(QColor(0, 255, 0), 4));
painter.setBrush(QColor(255, 0, 0));
// draw circle
painter.drawEllipse(rect);
painter.setCompositionMode(mode);
painter.drawImage(rect, sourceImage);
painter.end();
lbl->setPixmap(QPixmap::fromImage(resultImage));
return lbl;}
它是如何在 main.cpp 中创建的:
innerLayout_2->addWidget(lblCreate(QPainter::CompositionMode_Source), 0, 0);
innerLayout_2->addWidget(new QLabel("<CENTER>Source</CENTER>"), 1, 0);
我自己的怀疑是它可能取决于QImage::Format_ARGB32_Premultiplied。
或者是我的手工虫子。
无论如何,如果有任何想法,我将不胜感激。
提前谢谢!
【问题讨论】:
-
图片的 Alpha 通道怎么样。有吗?
-
试试
lbl->setStyleSheet("QLabel{ background-color: transparent;}"); -
呃,您正在将带有未初始化数据的
QImage与另一个带有未初始化数据的QImage合成。那是行不通的。