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

时间:2011-01-28 16:18:14

标签: qt

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

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

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

3 个答案:

答案 0 :(得分: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);
}

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

您可以在此处阅读:Qt Stylesheets reference在“可插图小部件列表”部分 - > QWidget的。

希望,这会有所帮助!

答案 1 :(得分:4)

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

事实证明,如果您将窗口小部件创建为QFrame的子类而不是QWidget,则background-image属性似乎很好。另外,正如Dave的例子所示,如果你只是创建一个“原始”QWidget,它似乎也可以正常工作。无论出于何种原因,如果您创建一个从QWidget派生的新窗口小部件,则后台图像将不再有效。

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

答案 2 :(得分:0)

以下代码在我的机器上运行正常。也许你可以看到它与你的不同之处?希望它有所帮助。

#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();
}