Qt样式表中的背景图像不起作用

时间:2014-03-01 02:26:48

标签: c++ qt stylesheet

这应该将背景设置为cats.jpg,但它没有做任何事情:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w; 
    w.setStyleSheet("background-image: url(images/ricepaper.png);");;

    w.show();

    return a.exec();
}

我认为这可能是图像位置的问题,因为更改窗口小部件的背景颜色工作正常,但images文件夹位于build-debug目录中,我相信它是正确的位置。我已经尝试过更改图像路径,语法和styleSheet类,没有任何工作,有什么建议吗?

1 个答案:

答案 0 :(得分:2)

来自Qt Style Sheets Reference

enter image description here

它应该工作。可能在程序所需的位置找不到图像文件。如果你正在使用Qt Creator,你应该知道它在一个单独的目录中构建目标二进制文件(通常使用类似build-yourprojectname-qtversion-Debug的名称)。这叫做 shadow build 。 您需要将图像复制到相对于该阴影构建目录的适当位置,否则程序将无法找到该文件。

最好的办法是将图像作为资源嵌入二进制文件中。 我刚试过这个,似乎对我有用:

main.cpp

int main(int argc, char *argv[])
{

   QApplication app(argc, argv);

   QWidget *w = new QWidget;
   w->setStyleSheet("background-image: url(:/resources/pixmaps/close.png);");

   w->show();

   return app.exec();
}

请注意:/中的url(:/resources/pixmaps/close.png)部分。这是嵌入式资源所必需的。

resources.qrc

<RCC>
<qresource prefix="/">
    <file>resources/pixmaps/close.png</file>

    ... other resource files go here
</qresource>

testproject.pro

结束时
   RESOURCES += \
   resources.qrc

当然,您需要将图像放在项目目录中的适当位置,以便资源编译器可以找到它。 在我的例子中,

 resources/
 ├── pixmaps
 │   ├── application.png
 │   ├── cancel.png
 │   ├── close.png    <--Here
 ...

enter image description here