Qt中的背景相乘而不是适合窗口大小

时间:2017-02-26 18:56:28

标签: c++ css image qt

在标题中,我试图使用以下代码将背景图像调整为窗口大小:

QPixmap bkgnd(":/new/prefix1/bkgrnd.png");
bkgnd = bkgnd.scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

QPalette palette;

palette.setBrush(QPalette::Background, bkgnd);
this->setPalette(palette);

但是图像会相乘并相互粘贴,而不是调整到窗口大小。

Original size window Resized image

1 个答案:

答案 0 :(得分:1)

如果您希望图像始终适合表单,则应在widget的resize事件中编写代码。为此,您应该覆盖小部件的resize事件。将此行添加到* .hpp文件

protected:
    void resizeEvent(QResizeEvent* evt) override;

然后,在resizeEvent方法中编写代码。

void MainWindow::resizeEvent(QResizeEvent* evt)
{
    QPixmap bkgnd(":/new/prefix1/bkgrnd.png");
    bkgnd = bkgnd.scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

    QPalette palette;

    palette.setBrush(QPalette::Background, bkgnd);
    this->setPalette(palette);

    QMainWindow::resizeEvent(evt); // call inherited implementation
}

要提高性能,请不要在resize事件中创建'QPixmap bkgnd'。