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

QPaint::drawPixmap在Windows和Linux上的行为不同,windows,linux,qt,png,transparent,Windows,Linux,Qt,Png,Transparent,我试图在QWidget中绘制一个透明的PNG文件。问题是,我在Windows和Linux上得到了不同的结果 我上传了,还有。差别显而易见 我用于测试的代码是- class TestWidget: public QWidget { public: TestWidget(const char* imagePath) { m_pixmap = QPixmap(imagePath); setStyleSheet("background-color: bla

我试图在QWidget中绘制一个透明的PNG文件。问题是,我在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();
我正在使用Qt4.5.1/4.7.2、WindowsXP和CentOS5.5

你知道有什么问题吗


编辑:
为了详细说明选定的答案,我必须使用24位格式的QImage(QImage::format_ARGB8565_预乘)。

看起来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);");
    }
};

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

尝试使用QImage而不是QPixmap。

Linux桌面的颜色深度是否足够?