我正在开发Qt 5小部件桌面应用程序,我想为所有弹出的窗口和对话框提供通用背景。问题是,对于每个窗口,我必须一遍又一遍地指定相同的代码来加载相同的背景。我还使用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中容纳它?

最佳答案

是的你可以!您将必须提供own stylesheet或通过调用QApplication::setStyleSheet(styleName)初始化应用程序。

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

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

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

10-08 05:19