Qt样式表。背景色,是的。背景图像,没有

Qt样式表。背景色,是的。背景图像,没有,qt,Qt,样式表有一个奇怪的问题:我有一个窗口,是QWidget类的子窗口。我对其应用样式表,以便理想地将整个窗口的背景更改为具有repeat-x和repeat-y的图像,并将其平铺 样式表“管道”起作用。如果我使用“背景色”并将其设置为红色,则整个窗口将被涂成红色。但是,如果我使用背景图像,它不会。如果我在窗口内添加一个子窗口小部件(使用Qt设计器),背景图像将在整个父窗口中工作,就在该子窗口小部件内部,而不是外部 显然我做错了什么,但我真的不知道为什么背景颜色会在整个窗口上工作,但背景图像不会,除非有

样式表有一个奇怪的问题:我有一个窗口,是QWidget类的子窗口。我对其应用样式表,以便理想地将整个窗口的背景更改为具有repeat-x和repeat-y的图像,并将其平铺

样式表“管道”起作用。如果我使用“背景色”并将其设置为红色,则整个窗口将被涂成红色。但是,如果我使用背景图像,它不会。如果我在窗口内添加一个子窗口小部件(使用Qt设计器),背景图像将在整个父窗口中工作,就在该子窗口小部件内部,而不是外部


显然我做错了什么,但我真的不知道为什么背景颜色会在整个窗口上工作,但背景图像不会,除非有一个子部件,然后,只有在它里面

下面的代码在我的机器上运行正常。也许你能看到它和你所拥有的有什么不同?希望对你有帮助

#include <QtGui>

int main(int argc, char **argv)
{
  QApplication app(argc, argv);
  QWidget main_window;
  main_window.setStyleSheet("background-image: url(Chrysanthemum.jpg); "
                            "background-position: top left; "
                            "background-repeat: repeat-xy;");
  main_window.show();
  return app.exec();
}
#包括
int main(int argc,字符**argv)
{
QApplication应用程序(argc、argv);
QWidget主窗口;
main_window.setStyleSheet(“背景图像:url(hummery.jpg);”
“背景位置:左上;”
“背景重复:重复xy;”;
main_window.show();
返回app.exec();
}

我知道这是一个老问题,但我偶然发现它,因为我遇到了完全相同的问题

事实证明,如果您将小部件创建为QFrame的子类而不是QWidget,那么背景图像属性似乎可以正常工作。此外,正如Dave的示例所示,如果您只创建一个“原始”QWidget,它似乎也可以正常工作。无论出于何种原因,如果您创建一个从QWidget派生的新小部件,背景图像将不再工作


如果您在Qt Designer或Creator中创建小部件,它们没有创建QFrame派生小部件的选项,因此我只告诉它我想要一个QWidget派生类,然后手动更改.cpp和.h文件以从QFrame派生而不是QWidget。

我遇到了类似的问题,通过阅读Qt样式表文档解决了这个问题

正如Qt的样式表参考中所述,将CSS样式应用于从QWidget继承的自定义小部件需要以这种方式重新实现paintEvent():

void CustomWidget::paintEvent(QPaintEvent *)
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
如果不这样做,您的自定义小部件将只支持背景、背景剪辑和背景源属性

您可以在这里阅读:在“可设置样式的小部件列表”->QWidget部分


希望,这会有帮助

请张贴样式表。Qt样式表规则与CSS规则不完全相同。这可能只是与您预期的行为不同,例如,设置样式的范围。仅当QWidget子窗口中已经存在QWidget元素时,此样式表才会显示jpeg,但仅在该元素的区域中,而不是整个窗口中。QWidget{background image:url(:/images/metal-texture.jpg);背景位置:左上角;背景重复:repeat-x repeat-y;/*背景颜色:红色;*/}对不起,我还是不知道发生了什么。我需要知道样式表应用于哪个元素。我还不清楚你的继承权。你能发布一些代码吗,或者画一个ASCII图表什么的?对不起,我说的太多了……:)顺便说一句,只需编辑你的问题,这样你就可以获得所有好的格式选项,而不是试图把它放在评论中。没有别的了。我想要做的就是有一个背景图像的窗口。窗户本身是空的。我能使这个背景图像工作的唯一方法是在我的UI上添加一个空的Qwidget(使用QT设计器)。然后背景图像只为QWidget绘制,而不是整个窗口。我想唯一的区别是我使用了QT设计器和*.ui文件,而您的解决方案是100%编程的。在任何情况下,我想我将通过一个内部小部件来解决这个问题,它覆盖了主QWidget的整个区域,并且有自己的背景。感谢您的帮助。另外,您似乎正在将
QWidget
的范围应用于样式表,并使用
repeat-x repeat-y
而不是
repeat-xy
。可能是其中之一导致了这种奇怪的行为?我为我的样式表实验选择了相同的Windows示例图片!;)哈,谢谢你!继承QFrame为我带来了好处。你救了我一天。