QPainter::drawPixmap 在 Windows 和 Linux 上的行为不同

发布于 2024-10-20 22:55:05 字数 1049 浏览 2 评论 0原文

我正在尝试在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凹づ凸ル 2024-10-27 22:55:05

尝试使用 QImage 而不是 QPixmap。

Try using QImage instead of QPixmap.

冷情 2024-10-27 22:55:05

看起来您的 Linux 桌面的颜色比 Windows 桌面少。
您检查过 CentOS 桌面上的颜色设置吗?
也许您可以尝试使用普通渐变并看看它的外观:

class TestWidget: public QWidget {
public:
    TestWidget(const char* imagePath)
    {
        setStyleSheet("background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #000000, stop: 1 #FFFFFF);");
    }
};

结果应该是从左到右的平滑水平渐变。

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:

class TestWidget: public QWidget {
public:
    TestWidget(const char* imagePath)
    {
        setStyleSheet("background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #000000, stop: 1 #FFFFFF);");
    }
};

The result should be a smooth horizontal gradient going from left to right.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文