C++ Qt为所有对话框设置公共背景

C++ Qt为所有对话框设置公共背景,c++,qt,qt5,C++,Qt,Qt5,我正在开发一个Qt5Widgets桌面应用程序,我想为所有弹出的窗口和对话框提供一个通用的背景。问题是,对于每个窗口,我必须一遍又一遍地指定同一段代码来加载相同的背景。我还使用了paint函数覆盖,以便在调整窗口大小时不会扭曲背景。这是我的密码: SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SettingsDialog) { ui->setupUi(thi

我正在开发一个Qt5Widgets桌面应用程序,我想为所有弹出的窗口和对话框提供一个通用的背景。问题是,对于每个窗口,我必须一遍又一遍地指定同一段代码来加载相同的背景。我还使用了
paint
函数覆盖,以便在调整窗口大小时不会扭曲背景。这是我的密码:

SettingsDialog::SettingsDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SettingsDialog)
{
    ui->setupUi(this);
    pixmapBg.load(":/images/google-material-design-wallpaper-10.jpg");
}
void SettingsDialog::paintEvent(QPaintEvent *pe)
{
        QPixmap pixmapBgL = pixmapBg.scaled(this->size());
        QPalette palette;
        palette.setBrush(QPalette::Background, pixmapBgL);
        this->setPalette(palette);
}

有没有一种方法可以在Qt中使用单个文件而不是在每个窗口中提及它

是的,你可以!您必须提供您的应用程序,或通过调用来初始化应用程序

从评论中跟进:
setStyleSheet
是最快的方法,即

qApp->setStyleSheet("QDialog, QMessageBox {background-image: url(:/images/google-material-design-wallpaper-10.jpg);}");

假设您有一个有效的QApplication引用
qApp
。请注意,如果您想细化样式表的范围,还可以引用自定义子类。

是的,您可以!您必须提供您的应用程序,或通过调用来初始化应用程序

从评论中跟进:
setStyleSheet
是最快的方法,即

qApp->setStyleSheet("QDialog, QMessageBox {background-image: url(:/images/google-material-design-wallpaper-10.jpg);}");

假设您有一个有效的QApplication引用
qApp
。请注意,如果要细化样式表的范围,也可以引用自定义子类。

下面是使用QApplication::setStyleSheet的一些代码:

QString styleSheet = "QWidget{\
                              background-color: yellow\
                             }"//style sheet in CSS style

int main(int argc, char** argv){
    QApplication app(argc, argv);
    app.setStyleSheet(styleSheet);//will set all the QWidgets' background color to yellow
    return app.exec();
}

实际上有一个背景图像属性,但我不确定哪些小部件支持它,因此您可以正确地进行检查。

下面是一些使用QApplication::setStyleSheet的代码:

QString styleSheet = "QWidget{\
                              background-color: yellow\
                             }"//style sheet in CSS style

int main(int argc, char** argv){
    QApplication app(argc, argv);
    app.setStyleSheet(styleSheet);//will set all the QWidgets' background color to yellow
    return app.exec();
}

实际上有一个背景图像属性,但我不确定哪些小部件支持它,因此您可以正确地进行检查。

您能用一些代码详细说明一下吗?我想要与我问题中的代码相同的功能。这也能处理窗口的大小调整吗?@AbhishekAgarwal样式设置遵循CSS规则:你可以使用任何
background-*
properties()使图像按你的意愿运行。我尝试了以下方法:
a.setStyleSheet(“QDialog,QMessageBox{背景图像:url(:/images/google-material-design-wallper-10.jpg);背景尺寸:cover;}”);
它不断给出错误:
未知属性背景尺寸
。当我在.ui编辑器窗口中给出它时,同样有效。唉,Qt5仍然只接受CSS2(,遗憾的是仍然没有CSS3)属性…你必须使用这里提供的属性。你能用一些代码详细说明一下吗?我想要与我问题中的代码相同的功能。这也能处理窗口的大小调整吗?@AbhishekAgarwal样式遵循CSS规则:你可以使用任何
背景-*
属性()为了使图像按您的意愿运行,我尝试了以下操作:
a.setStyleSheet(“QDialog,QMessageBox{background image:url(:/images/google-material-design-wallper-10.jpg);background size:cover;}”)
它不断给出错误:
未知属性背景大小
。当我在.ui编辑器窗口中给出它时,同样有效。糟糕的是,Qt5仍然只接受CSS2(,遗憾的是仍然没有CSS3)属性…您必须使用这里可用的属性