如何将QWidget的背景放在QGridLayout中的其他小部件下

Posted

技术标签:

【中文标题】如何将QWidget的背景放在QGridLayout中的其他小部件下【英文标题】:How to put background of QWidget under other widgets in a QGridLayout 【发布时间】:2012-10-06 01:09:30 【问题描述】:

我花了好几个小时试图理解(谷歌搜索)为什么我的小部件没有显示在我用作 Windows 的 QWidget 孩子中。

孩子大多是 QLabel 和一些 QSlider。布局是一个QGridlayout

这是我的一些窗口代码:

FenPrincipale::FenPrincipale()
    
        this->setWindowTitle("Premier Test");
        this->resize(400, 200);
        QPalette palette;
        palette.setBrush(this->backgroundRole(), QBrush(QImage("images/metal400x200.png")));

        this->setPalette(palette);
        /*
        this->setStyleSheet("background-image: url(images/metal400x200.png); "
                            "background-position: top left; "
                            "background-repeat: repeat-xy;"
                            );
        */

        buildChildren();
        buildLayout();

        this->setLayout(layout_principale);
    

编辑:

我的孩子是怎样炼成的

void FenPrincipale::buildChildren()

    m_title = new QLabel("MonTest");
    m_nextPageButton = new QLabel(">");

    m_line = new QLabel("Slide here");
    m_labelSlider = new QSlider;
    m_result = new QLabel("Result");

    /* 
     * Other children is set here...
    */

瞧瞧结果:

我尝试更改字体和其他方法来设置背景,但背景始终显示在其他小部件之上。

我错过了什么吗?

【问题讨论】:

你是如何培养你的孩子的?你在布局方法中做什么?代码的重要部分未显示。 我刚刚用部分构建过程编辑了问题 【参考方案1】:

看起来你对样式表实现很接近了。我得到以下正确结果:

setStyleSheet("QMainWindow  background-image: url(:/images/metal400x200.png)  ");

【讨论】:

它确实对我有用,顺便问一下 QMainWindow 在那里做什么? @MarcSJ 参考qt-project.org/doc/qt-4.8/stylesheet-reference.html并在页面上搜索“background-image”。对 QMainWindow 的引用导致主窗口图像的背景受到样式表的影响。如果您的“FenPrincipale”小部件派生自其他类,请将 QMainWindow 替换为它派生自的类。

以上是关于如何将QWidget的背景放在QGridLayout中的其他小部件下的主要内容,如果未能解决你的问题,请参考以下文章

如何使用样式表设置 qwidget 的背景颜色?

QWidget中如何实现mouseEnter和mouseLeave事件?

如何使用指定的 png 文件制作 QWidget 背景?

如何设置 QWidget 背景颜色?

修改QWidget 背景色

更改 Qt 中的选项卡设计