C++ 如何将背景图像添加到QMain窗口?

C++ 如何将背景图像添加到QMain窗口?,c++,qt,C++,Qt,嗨,我是QT创建者的新手。我尝试了很多方法来设置Q主窗口的背景图像。我用我的图像添加了一个资源文件夹。我尝试在UI中使用setstylesheet添加,并尝试对其进行编码。当我使用UI时,我可以看到图像,但当我运行它时,什么也看不到。我想把一个扑克桌的图像,我有作为背景,并能够把按钮等上面 main.cpp: #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) {

嗨,我是QT创建者的新手。我尝试了很多方法来设置Q主窗口的背景图像。我用我的图像添加了一个资源文件夹。我尝试在UI中使用setstylesheet添加,并尝试对其进行编码。当我使用UI时,我可以看到图像,但当我运行它时,什么也看不到。我想把一个扑克桌的图像,我有作为背景,并能够把按钮等上面

main.cpp:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();


    return a.exec();
}
就像我说的,我试过这样做,把图像放到UI中,但它们都不起作用。我想把图像设置为整个事情的背景

我也试着用这个:

QWidget *pic = new QWidget(ui->tab);
    pic->setStyleSheet("background-image: url(:/images/images/PokerTableBackground.jpg)");
    pic->setGeometry(QRect(10,10,220,48)); // your location and size.

您可以通过执行以下操作将背景图像添加到
主窗口中

  • 创建一个
    QPixmap
    ,并为其提供图像的路径

  • 创建一个
    qpalete
    并使用您的pixmap将其设置为
    QBrush
    ,并将其
    ColorRole
    设置为
    qpalete::Background
  • main窗口的
    调色板设置为您创建的调色板
  • 例如,您可以将以下行添加到
    main窗口的构造函数中:

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        QPixmap bkgnd("/home/user/Pictures/background.png");
        bkgnd = bkgnd.scaled(this->size(), Qt::IgnoreAspectRatio);
        QPalette palette;
        palette.setBrush(QPalette::Background, bkgnd);
        this->setPalette(palette);
    }
    

    此功能的优点是,您可以通过编程方式修改/更改背景图像,而无需使用或学习任何css样式表语法。

    您可以设置中央窗口的背景样式表

    this->centralWidget()->setStyleSheet("background-image:url(\"bkg.jpg\"); background-position: center; ");
    
    在构造函数中,它将是这样的:

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        this->centralWidget()->setStyleSheet(
             "background-image:url(\"bkg.jpg\"); background-position: center;" );
    }
    

    CSS样式的背景将在子窗口小部件中继承,从而创建外观怪异的窗口。一种可能的解决方案是将背景限制为
    主窗口
    #centralWidget
    。此外,如果您希望拉伸图像以覆盖整个小部件,请使用这种CSS

    this->setStyleSheet(
                "#centralWidget { "
                " border-image: url(:/background.png) 0 0 0 0 stretch stretch;"
                "}");
    

    在mainwindow.cpp类中,您在哪里将*pic元素绘制到窗口上?如下所示:mainwindow::mainwindow(QWidget*parent):QMainWindow(parent),ui(newui::mainwindow){ui->setupUi(this);QWidget*pic=newqwidget(this);pic->setStyleSheet(“背景图像:url(:/images/images/porktablebackground.jpg)”);pic->setGeometry(QRect(10,10220,48));//您的位置和大小。}不惜一切代价避免使用CSS样式表。它们有缺陷,难以调试和维护。以我个人的经验,样式表工作得更好。但它们只是为我工作。@cubuspl42是的,它们工作得很好,但对于那些不习惯css样式表语法的人,或者根本没有时间学习它们,或者不经常执行此类任务的人来说,这是一个更合适的解决方案。我同意Barracuda。此解决方案立即起作用,但也让我可以缩放图像以实现高DPI显示。很好的解决方案。谢谢<代码>QPalette::Background
    已过时。改用
    qpalete::Window
    。我的项目什么也没发生。你确定你的代码是正确的吗?它确实编译了,我已经用Qt5测试过了。但是如果它是“正确的”,我不能告诉你,什么样的代码是正确的?
    this->setStyleSheet(
                "#centralWidget { "
                " border-image: url(:/background.png) 0 0 0 0 stretch stretch;"
                "}");