QPainter::drawPixmap 在 Windows 和 Linux 上的行为不同
我正在尝试在 QWidget 内绘制透明的 PNG 文件。问题是,我在 Windows 和 Linux 上得到不同的结果。
我上传了图片,Windows 屏幕截图,以及 Linux 屏幕截图。差异很容易看出。
我用于测试的代码是 -
class TestWidget: public QWidget {
public:
TestWidget(const char* imagePath)
{
m_pixmap = QPixmap(imagePath);
setStyleSheet("background-color: black");
}
protected:
virtual void paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(QPoint(0,0), m_pixmap);
}
QPixmap m_pixmap;
};
主要功能如下所示:
TestWidget* testWidget = new TestWidget(imagePath);
testWidget->setGeometry(0, 10, 1024, 1024);
testWidget->show();
我使用 Qt 4.5.1/4.7.2、Windows XP 和 CentOS 5.5。
有什么想法可能是什么问题吗?
编辑:
为了详细说明所选答案,我必须使用 24 位格式的 QImage (QImage::Format_ARGB8565_Premultiplied)。
I'm trying to draw a transparent PNG file inside a QWidget. The problem is, I'm getting different results on Windows and Linux.
I uploaded the image, Windows screenshot, and Linux screenshot. The difference could be seen easily.
The code I used for testing is -
class TestWidget: public QWidget {
public:
TestWidget(const char* imagePath)
{
m_pixmap = QPixmap(imagePath);
setStyleSheet("background-color: black");
}
protected:
virtual void paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(QPoint(0,0), m_pixmap);
}
QPixmap m_pixmap;
};
And the main function looks like this:
TestWidget* testWidget = new TestWidget(imagePath);
testWidget->setGeometry(0, 10, 1024, 1024);
testWidget->show();
I'm using Qt 4.5.1/4.7.2, Windows XP and CentOS 5.5.
Any ideas what could be the problem?
Edit:
To elaborate on the selected answer, I had to use QImage with a 24bits format (QImage::Format_ARGB8565_Premultiplied).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试使用 QImage 而不是 QPixmap。
Try using QImage instead of QPixmap.
看起来您的 Linux 桌面的颜色比 Windows 桌面少。
您检查过 CentOS 桌面上的颜色设置吗?
也许您可以尝试使用普通渐变并看看它的外观:
结果应该是从左到右的平滑水平渐变。
It looks like your Linux desktop has less colors than the Windows desktop.
Have you checked your color settings on the CentOS desktop?
Maybe you can try with an ordinary gradient and see how it looks:
The result should be a smooth horizontal gradient going from left to right.