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