Russian Qt Forum
Ноябрь 01, 2024, 03:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QStyledItemDelegate и QStyleOptionProgressBar  (Прочитано 17105 раз)
SABROG
Гость
« : Февраль 13, 2010, 03:16 »

У меня есть делегат, который вместо ячеек рисует прогресс, как в менеджерах закачки. Но мне ужасно не нравится стиль прогресса - кубиками (Blocks), я хочу сплошную заливку (Solid). Т.к. я использую QStyleOptionProgressBar и метод DrawControl в paint()'e, то у меня нет возможности поставить Style Sheet, т.к. виджета не существует. Менять стиль всего приложения мне не хочется. Самому что ли рисовать? Даже в винде можно выбрать 2 варианта отображения полоски. А в Qt один что ли и не самый лучший?

Записан
BRE
Гость
« Ответ #1 : Февраль 13, 2010, 08:55 »

Style sheet же.
Записан
SABROG
Гость
« Ответ #2 : Февраль 13, 2010, 09:39 »

Style sheet же.

Это логично, но я не могу понять. Если я рисую контрол через drawControl(), то куда мне ставить стайлшит, виджету на котором рисую?
Записан
BRE
Гость
« Ответ #3 : Февраль 13, 2010, 12:57 »

Это логично, но я не могу понять. Если я рисую контрол через drawControl(), то куда мне ставить стайлшит, виджету на котором рисую?
Всему приложения: QApplication::setStyleSheet.

Игрался с таким кодом:
Код
C++ (Qt)
void ProgressBarDelegate::paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if( !index.isValid() )
return;
 
painter->save();
int val = index.data( Qt::DisplayRole ).toInt();
if( val )
{
QStyleOptionProgressBar opt;
opt.state = option.state;
opt.direction = option.direction;
opt.rect = option.rect;
opt.fontMetrics = option.fontMetrics;
opt.palette = option.palette;
opt.minimum = 0;
opt.maximum = 100;
opt.progress = val;
opt.textAlignment = Qt::AlignCenter;
opt.textVisible = true;
opt.text = QString( "%1 %" ).arg( val );
 
QProgressBar bar;
QApplication::style()->drawControl( QStyle::CE_ProgressBar, &opt, painter, &bar );
}
painter->restore();
}
 

Если не передавать указатель на QProgressBar при вызове drawControl, то css работать не будет?
Вот сейчас думаю, как бы это сделать "покрасивше"...
Записан
SABROG
Гость
« Ответ #4 : Февраль 13, 2010, 15:07 »

Виджет вроде бы не обязательный параметр. Я пытался ставить стили вьюпорту, вьюхе. Никак не влияют. Это что же получается, чтобы отрисовать какой-нибудь контрол в делегате с использованием стайлшитов, то где-то на фоне нужно иметь хотя бы по одному экземпляру этих виджетов?
Записан
BRE
Гость
« Ответ #5 : Февраль 13, 2010, 15:19 »

Виджет вроде бы не обязательный параметр. Я пытался ставить стили вьюпорту, вьюхе. Никак не влияют. Это что же получается, чтобы отрисовать какой-нибудь контрол в делегате с использованием стайлшитов, то где-то на фоне нужно иметь хотя бы по одному экземпляру этих виджетов?
Мне это тоже не очень понятно.  Непонимающий
Но если не указать этот виджет, то stylesheet не применяется. Опять же возникают сложности с рисованием QProgressBar по частям, например при отрисовке QStyle::SE_ProgressBarContents (есть виджет или нет - stylesheet не применяется).
Записан
SABROG
Гость
« Ответ #6 : Февраль 13, 2010, 15:23 »

Может троллям как багрепорт или feature request запостить?
Записан
BRE
Гость
« Ответ #7 : Февраль 13, 2010, 15:39 »

Может троллям как багрепорт или feature request запостить?
Мне было бы очень интересно узнать как рисовать контроллы с использованием stylesheet в делегатах.
Сам спросить не смогу (языкам не обучен  Улыбающийся), так что если спросишь и опубликуешь решение - буду благодарен.
Записан
SABROG
Гость
« Ответ #8 : Февраль 15, 2010, 16:47 »

Не хотят принимать багу Грустный

http://bugreports.qt.nokia.com/browse/QTBUG-8191
Записан
BRE
Гость
« Ответ #9 : Февраль 15, 2010, 19:38 »

Я думаю логика у них следующая.
Stylesheet можно применить только для конкретного объекта, даже если таблица стилей описана глобально в QApplication.
Поэтому, нужен конкретный объект, к которому стили были применены. Остается его создавать...
Записан
SABROG
Гость
« Ответ #10 : Февраль 15, 2010, 21:21 »

Думаю, что стайлшиты очень сильно привязаны к существующим виджетам Qt. Даже если посмотреть на параметры некоторых виджетов, то они очень специфичны. Я например вообще нигде не видел информации о том как можно создать свой виджет с нуля и добавить в него поддержку стайлшитов со своими правилами и элементами управления. Если по аналогии с часами, то для такого виджета можно было бы задать шрифт для цифр, картинки для каждой из стрелок, цвет фона, цвет шрифта, толщину круга и даже вид анимации (easing).
Записан
zoro86
Гость
« Ответ #11 : Сентябрь 06, 2010, 12:44 »

У меня такая же не приятность ... кубики получаются длинные и некрасивые необходимо сделать сплошную заливку синим цветом..

не подскажите как??
Записан
yuriyb
Гость
« Ответ #12 : Март 20, 2012, 17:11 »

Up!

Народ, на те же грабли наступил...

Как chunk color для прогрес-бара хотя бы поменять при самостоятельной отрисовке в делегате?

Есть идеи ?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Март 20, 2012, 17:38 »

Попробуй использовать QStyleOptionProgressBarV2.
Записан

Qt 5.11/4.8.7 (X11/Win)
andrew.k
Гость
« Ответ #14 : Апрель 16, 2012, 20:23 »

Я так понимаю, что решение отсутствует на данный момент?
Та же проблема (уже тему создал отдельную)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.083 секунд. Запросов: 22.