如何将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中的其他小部件下的主要内容,如果未能解决你的问题,请参考以下文章