QPainter :: drawPixmap在Windows和Linux上表现不同

时间:2011-03-09 15:46:23

标签: windows linux qt png transparent

我正在尝试在QWidget中绘制透明的PNG文件。问题是,我在Windows和Linux上得到了不同的结果。

我上传了the imageWindows screenshotLinux screenshot。可以很容易地看出差异。

我用于测试的代码是 -

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)。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

尝试使用QImage而不是QPixmap。