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

Jas*_*enX 6 qt

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

样式表"管道"有效.如果我使用"background-color"并将其设置为红色,整个窗口将被涂成红色.但是,如果我使用背景图像,则不会.如果我在窗口内添加一个CHILD WIDGET(使用Qt-Designer),那么background-image将在父窗口的整个内部工作,但不在其外部.

显然我做错了什么,但是为什么背景颜色在整个窗口上工作真的很无能,但背景图像不会,除非有一个子窗口小部件,然后,只有它内部.

Rom*_*lov 14

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

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

void CustomWidget::paintEvent(QPaintEvent *)
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
Run Code Online (Sandbox Code Playgroud)

如果不这样做,您的自定义小部件将仅支持背景,背景剪辑和背景原始属性.

你可以在这里阅读:Qt Stylesheets在"Stylable Widgets列表" - > QWidget一节中引用.

希望,这会有所帮助!


Dav*_*eer -1

下面的代码在我的机器上运行良好。也许您可以看到它与您拥有的不同之处?希望它有帮助。

#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();
}
Run Code Online (Sandbox Code Playgroud)