Фон должен быть установлен на 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();
}

Я подумал, что это может быть проблема с расположением изображения, поскольку изменение цвета фона виджета работает нормально, но папка изображений находится в каталоге build-debug, который, как мне кажется, является правильным местом. Я пробовал изменить путь к изображению, синтаксис и класс styleSheet, но ничего не помогло, есть предложения?

2
user3285700 1 Мар 2014 в 06:26
Думаю, тебе нужно написать "QWidget {background-image: url('images/ricepaper.png')}"
 – 
andrea.marangoni
1 Мар 2014 в 06:46
Что это за класс Widget? Возможно проблема в этом. Например, вы отменяете paintEvent()?
 – 
hyde
1 Мар 2014 в 11:54
1
@ andrea.marangoni- Похоже, что одинарные кавычки в URL-адресе не нужны (qt-project.org/doc/qt-4.8/stylesheet-examples.html).
 – 
user3285700
2 Мар 2014 в 07:25
- Класс Widget просто наследуется от QWidget, я делаю приложение на основе виджетов. Я также пробовал настроить его в оконном приложении, чтобы тип w унаследовал от QMainWindow, и у него все еще была та же проблема - фоновый цвет работает, а фоновое изображение - нет.
 – 
user3285700
2 Мар 2014 в 07:32

1 ответ

Лучший ответ

Из справочника по таблицам стилей Qt:

enter image description here

Он должен работать. Вероятно, файл изображения не находится там, где ожидает программа. Если вы используете Qt Creator, вы должны знать, что он создает целевой двоичный файл в отдельном каталоге (обычно с именем вроде build-yourprojectname-qtversion-Debug или около того). Это называется теневой сборкой . Вам нужно будет скопировать изображения в нужное место относительно этого каталога теневой сборки, иначе программа не сможет найти файл.

Лучше всего встроить изображение в двоичный файл в качестве ресурса. Я просто попробовал это и, похоже, у меня работает:

В 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

2
dschulz 1 Мар 2014 в 16:01