10

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

主.cpp:

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

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


    return a.exec();
}

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setStyleSheet("{background-image: url(:/images/images/PokerTableBackground.jpg);}");
}

MainWindow::~MainWindow()
{
    delete ui;
}

就像我说的那样,我尝试过这样做,并将图像放在 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.
4

3 回答 3

24

您可以MainWindow通过执行以下操作将背景图像添加到您的:

  1. 创建一个QPixmap并为其提供图像的路径。
  2. 创建一个并使用您的像素图QPalette设置它,它是.QBrushColorRoleQPalette::Background
  3. 将您的MainWindow调色板设置为您创建的调色板。

例如,您可以将此行添加到MainWindow类的构造函数中:

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 样式表语法。

于 2014-04-22T18:53:26.840 回答
12

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

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;" );
}
于 2015-08-15T05:32:41.587 回答
6

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

this->setStyleSheet(
            "#centralWidget { "
            " border-image: url(:/background.png) 0 0 0 0 stretch stretch;"
            "}");
于 2017-12-14T13:52:37.687 回答