QPainter :: drawPixmap ведет себя по-разному в Windows и Linux - PullRequest
0 голосов
/ 09 марта 2011

Я пытаюсь нарисовать прозрачный файл PNG внутри QWidget. Проблема в том, что я получаю разные результаты на 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.

Есть идеи, в чем может быть проблема?


Edit:

Для уточнения выбранного ответа мне пришлось использовать QImage с 24-битным форматом (QImage :: Format_ARGB8565_Premultiplied).

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Попробуйте использовать QImage вместо QPixmap.

1 голос
/ 10 марта 2011

Похоже, ваш рабочий стол 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);");
    }
};

Результатом должен быть плавный горизонтальный градиент, идущий слева направо.

...