Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: break от Декабря 25, 2007, 03:11



Название: SetBackgroundPixmap
Отправлено: break от Декабря 25, 2007, 03:11
что правильно использовать вместо SetBackgroundPixmap, в QT4 для установки растровой картинки в качестве фона произвольного виджета
если есть:

QWidget someWidget();

что с ним необходимо сделать?

Заранее спасибо!!!


Название: Re: SetBackgroundPixmap
Отправлено: Alex03 от Декабря 25, 2007, 07:34
не знаю что есть правильно, но можно например так:
Цитировать
    QPalette pal = palette();
    pal.setBrush(QPalette::Window, QBrush(QPixmap( ":/images/background.png")));
    setPalette(pal);


Название: Re: SetBackgroundPixmap
Отправлено: break от Декабря 25, 2007, 09:20
{
Спасибо;
Огромное;
}

потратил 2 часа пока искал надо было сразу спросить...


Название: Re: SetBackgroundPixmap
Отправлено: Dodge от Декабря 25, 2007, 15:29
можно еще через css задать.
примерно так:
Код:
...
MyWidget w;
QString myStyle =
    "MyWidget {\n"
    "    background-image: url( "myimage.png" );\n"
    "}\n";
w.setStyleSheet( myStyle );


Название: Re: SetBackgroundPixmap
Отправлено: break от Декабря 29, 2007, 14:52
А можно ли фон (картинку) для формы в Дизайнере установить?


Название: Re: SetBackgroundPixmap
Отправлено: Dodge от Января 05, 2008, 03:51
В дизайнере... ммм
По моиму нет, вообще дизайнер умеет генерить файлы - ресурсов, так что если нет в стандартных виджетах, можно написать затычку  ;D


Название: Re: SetBackgroundPixmap
Отправлено: break от Января 07, 2008, 23:48
Что за затычку, причем тут ресурсы?
Смысл прост - есть прибор - на нем куча кнопок, надо сделать копию этого прибора (прибор из реальной жизни - скажем калькулятор к примеру, а сделать окошко кот. распахнуто на ввесь экрани полностью повторяет внешне этот калькулятор), поэтому удобно на этапе разработки, а в нек. случаях и в конечной версии проги использовать фото этого прибора, --- чтобы правильно расставить кнопки. По тех. заданию мне надо сделать максимально прибл. копию нескольких таких приборов. Поэтому подложка нужна в дизайнере - на оффиц. форуме QT обсуждал эту тему и нашел 1 решение(оно не особо удобное но работает) - приведу его на англ. т.к. не охото заново описывать его на русском:

I found 1 solution:

use in StyleSheets Absolute name of my picture (QT Designer show picture), but before end link project use normal names from resource (:/images/...)

it work with QFrame,

QFrame
{
/* background-image: url(:/images/Saut_1280x1024.jpg);*/ /* comment normal image name */
background-image: url(/home/bboy/Projects/C++/Progs/TrainDevices/MansSautPanel/images/Saut_12
80x1024.jpg);
}


and others QFrame (in my QFrame) - i set to empty StyleSheet, becouse i want only one background

QFrame
{
background-image: url();
}

I use one Frame on VBoxLayout for Background, and other Widgets put on it.


Название: Re: SetBackgroundPixmap
Отправлено: Dodge от Января 08, 2008, 18:02
затычка - это plugin
А ресурсы тут при том, что вашу картинку нужно будет гдето хранить, в qt контент принято хранить в файлах ресурсов.

А пример с использованием таблицы стилей я вам уже приводил выше.


Название: Re: SetBackgroundPixmap
Отправлено: break от Января 09, 2008, 14:03
С помощью ресурсов увидеть картинку в дизайнере нельзя!!!

В этом то вся и проблема, за пример со стилями спасибо, я его и использовал для решения, но в качестве пути на этапе разработки использую абсолютный путь к файлу, а не путь к ресурсу (это видно в коде выше).

Потом абсолютный путь приходится менять на путь с ресурсом (уже при конечной линковке программы).

В этом то и неудобство (временами забываю подменить все пути и получается что на другой машине естественно картинки нет - т.к. указан абсолютный путь несущ. файла).

Кроме того неудобно использовать стили т.к. у всех дочерних QFrame та же картинка из-за наследования стиля пытается быть фоном. приходится для всех компонентов наследников QFrame делать доп. определение стиля с пустым фоном (тоже все в коде выше есть). А у меня внутри много таких компонентов QLabel, LCDNumber и т.д.

Вот виджет написать можно, который будет контейнером и умел бы фон показывать (это несложно, может я когда нибудь так и сделаю, просто сейчас не хочется время тратить раз уж заработало в дизайнере со стилями). Хотя странно что для такой простой цели надо свой виджет делать...

Может еще решения есть?


Название: Re: SetBackgroundPixmap
Отправлено: Dodge от Января 10, 2008, 13:27
Кроме того неудобно использовать стили т.к. у всех дочерних QFrame та же картинка из-за наследования стиля пытается быть фоном. приходится для всех компонентов наследников QFrame делать доп. определение стиля с пустым фоном (тоже все в коде выше есть). А у меня внутри много таких компонентов QLabel, LCDNumber и т.д.
Попрбуй задать имя целевому виджет( например setObjectName( "myWidget_9321" ) ), а стиль для него задать так:
Код:
MyWidgetClass#myWidget_9321 {
    ...
}
если не ошибаюсь, это выглядит именно так, уточнить можно в асисте.


Название: Re: SetBackgroundPixmap
Отправлено: break от Января 11, 2008, 03:30
да спасибо, это уже положительный момент!