Russian Qt Forum

Qt => QSS => Тема начата: mutineer от Май 25, 2011, 17:58



Название: Прозрачный фон у QTableView
Отправлено: mutineer от Май 25, 2011, 17:58
Доброго времени суток

Как сделать прозрачный фон у QTableView?

UPD: Решил. Оказалось что GTK-style не поддерживает прозрачный фон для ячеек View. Поменял у View стиль на Motif и все заработало


Название: Re: Прозрачный фон у QTableView
Отправлено: kambala от Май 25, 2011, 18:13
QWidget::setWindowOpacity() ?


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 11:49
Нет, у айтемов все равно белый фон остается


Название: Re: Прозрачный фон у QTableView
Отправлено: alexman от Май 26, 2011, 12:07
Попробуйте viewport-у установить ???


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 12:08
Доброго времени суток

Как сделать прозрачный фон у QTableView?


Вот пример как разместить картинку в QTableView и чтобы ее было видно через альтернативную расцветку строк. Закоментированн пример установки прозрачности и для основного цвета.

qss

Код:
.QTableView
{                                                                                                                                                                                                                                           
    background-image: url(/usr/share/style/logo.png);
    background-position: center center;
    background-attachment: fixed;
    background-repeat: no-repeat;
    alternate-background-color: rgba(255, 255, 255, 15%);

/*
    background-color: rgba(255, 255, 255, 50%);
    alternate-background-color: rgba(245, 245, 220, 50%);
*/                                                                                                                                                                                                                                           
}


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 13:09
Фон устанавливается, полупрозрачный цвет поверх него есть, но все это видно только в той части QTableView, где нет ячеек. Цвет ячеек остается белым((


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 13:12
Фон устанавливается, полупрозрачный цвет поверх него есть, но все это видно только в той части QTableView, где нет ячеек. Цвет ячеек остается белым((

Белым и непрозрачным?
Скришот и код в студию!


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 13:37
Код
CSS
background-image: url(/music/button_stop.png);
background-color: rgba(0, 0, 100, 150);
alternate-background-color: rgba(100, 0, 0, 150);

Вот что получается при таком стиле:


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 13:43
Код
CSS
background-image: url(/music/button_stop.png);
background-color: rgba(0, 0, 100, 150);
alternate-background-color: rgba(100, 0, 0, 150);

Вот что получается при таком стиле:


background-color: rgba(0, 0, 100, 15%);
alternate-background-color: rgba(100, 0, 0, 15%);


Не совсем представляю что такое для прозрачности 150. Вероятно нужно, таки, поставить %


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 13:48
Не совсем представляю что такое для прозрачности 150. Вероятно нужно, таки, поставить %

Для прозрачности 150 то же самое, что и для компонентов цвета - она тож может задаваться числом из диапазона 0-255.

Кстати, background-color находится под изображением, а не над ним


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 13:54
Для прозрачности 150 то же самое, что и для компонентов цвета - она тож может задаваться числом из диапазона 0-255.
Да, в документации нашел, но при этом в qss такое указание прозначности не работает. Только что проверил на своем проекте - Qt: 4.7.0. Такое же поведение было на Qt: 4.6.x


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 13:57
В qss не знаю, но через setStyleSheet работает


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 14:34
В qss не знаю, но через setStyleSheet работает

Так работает прозрачность или нет?


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 14:39
В qss не знаю, но через setStyleSheet работает

Так работает прозрачность или нет?

Работает ее задание в виде 0-255 вместо процентов, но задача не решена


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 15:17
Работает ее задание в виде 0-255 вместо процентов, но задача не решена

Тогда полный код в студию. Там где QTableView.setStyleSheet(QString styleStr)
Нужен не кусок, а вся строка "styleStr"

И еще вопрос, тип объекта к которому применяется setStyleSheet - QTableView или что-то отнаследованное от QTableView?


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 15:27
Это и была вся строка стиля.

Что-то унаследованное


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 15:51
Непонятно Ваше нежелание показать весь кусок кода, облегчило бы понимание ситуации...

В конструкторе основной формы

Код
C
QString styleStr(""
" background-image: url(/usr/share/style/logo.png); "
" background-color: rgba(0, 0, 100, 50) ; "
" alternate-background-color: rgba(100, 0, 0, 50);");
 
ui.tableShowcase->setStyleSheet(styleStr);
 

или

Код
C
QString styleStr(""
" background-image: url(/usr/share/style/logo.png); "
// " background-color: rgba(0, 0, 100, 50) ; "
" alternate-background-color: rgba(100, 0, 0, 50);");
 
ui.tableShowcase->setStyleSheet(styleStr);
 


дает результат которой на скриншотах...


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 16:08
Хорошо, вот кусок кода, где устанавливается стиль:
Код
C++ (Qt)
mpPlayList->setStyleSheet(config.value("styleSheet"));

текст стиля я уже приводил, результат тоже


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 16:32
Хорошо, вот кусок кода, где устанавливается стиль:
Код
C++ (Qt)
mpPlayList->setStyleSheet(config.value("styleSheet"));

текст стиля я уже приводил, результат тоже

Подозреваю, что config это QSettings
тогда стоит  попытаться сделать, т.к. value() возвращает QVariant
Код
C++ (Qt)
mpPlayList->setStyleSheet(config.value("styleSheet").toString());

Ну и раз стиль хранится в настройках, почему бы его не вынести в отдельный файл где хранить стили на все приложение для каждого конкретного класса, объекта и т.д.?


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 16:47
Нет, это QHash<QString, QString>

Стиль читается из файла


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 16:55
Не вопрос...
Покажите вывод
Код
C++ (Qt)
mpPlayList->setStyleSheet(config.value("styleSheet"));
qDebug() << "style =" << mpPlayList->styleSheet();
 


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 17:03
style = background-image: url(/music/button_stop.png); background-color: rgba(0, 0, 100, 10%); alternate-background-color:rgba(100, 0, 0, 10%);


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 17:09
style = background-image: url(/music/button_stop.png); background-color: rgba(0, 0, 100, 10%); alternate-background-color:rgba(100, 0, 0, 10%);
Мистика какая-то... Нужен Firebug :-)

а еще какие-нить стили в приложении используются? подозреваю, что что-то перекрывает определение стиля...


Название: Re: Прозрачный фон у QTableView
Отправлено: mutineer от Май 26, 2011, 17:42
Используется довольно много стилей, но на родителях виджета вроде ничего нет. Смущает, что у самой таблицы фон нормально меняется, а у ячеек белая подложка под фоном


Название: Re: Прозрачный фон у QTableView
Отправлено: Termit от Май 26, 2011, 23:58
Так чего бы эти стила не вынести в одтельный файл, может там будет яснее?
Если есть стиль который применяется к QApplication он запросто может наследоваться.