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

时间:2012-10-06 01:09:30

标签: c++ qt background-image qwidget qlabel

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

孩子们大多是QLabel和一些QSliders。布局是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...
    */
}

Voilà结果:

enter image description here

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

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

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

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