Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: WereWind от Июнь 16, 2016, 17:16



Название: Стилизация QCombobox
Отправлено: WereWind от Июнь 16, 2016, 17:16
Досталась мне программа с QComboBox, Это почти обычный комбобокс, но с галочкой напротив текущего выбранного элемента. Галочка появляется в убунте от вот этого стайлшита
Код:
QComboBox{
    background-color: red
}

QComboBox:on{
    background-color: green
}
Если оба блока удалить, она пропадает, если есть хотя бы один - остается

Нужно сделать элементы выпадающего меню покрупнее. Я прицепил QStyledItemDelegate с перегруженным sizeHint.
Код:
QSize CComboBoxPopupItemDelegate::sizeHint(const QStyleOptionViewItem&,  const QModelIndex &) const {
  return QSize(200, 60);
}


Код:
 combo_box_->view()->setItemDelegate(new CComboBoxPopupItemDelegate(this));

Элементы увеличились, но из них пропала галочка отвалилась раскраска - у них теперь дефолтный цвет окна. Как лучше всего и элементы увеличить и галочку сохранить?


Название: Re: Стилизация QCombobox
Отправлено: Bepec от Июнь 16, 2016, 20:17
Стиль и QSS - это взаимозаменяемые вещи, но пользоваться ты можешь только одной из них.


Название: Re: Стилизация QCombobox
Отправлено: Racheengel от Июнь 16, 2016, 23:08
Кастомной отрисовкой разве что... Галочка для комбобокса - вещь не типичная..


Название: Re: Стилизация QCombobox
Отправлено: GreatSnake от Июнь 17, 2016, 11:19
Стиль и QSS - это взаимозаменяемые вещи, но пользоваться ты можешь только одной из них.
С чего это ???


Название: Re: Стилизация QCombobox
Отправлено: Racheengel от Июнь 17, 2016, 11:19
Стиль и QSS - это взаимозаменяемые вещи, но пользоваться ты можешь только одной из них.

Я бы сказал, взаимоисключающие :)


Название: Re: Стилизация QCombobox
Отправлено: Old от Июнь 17, 2016, 11:31
Я бы сказал, взаимоисключающие :)
Да почему? :)


Название: Re: Стилизация QCombobox
Отправлено: Racheengel от Июнь 17, 2016, 11:42
Я бы сказал, взаимоисключающие :)
Да почему? :)

А Вы попробуйте застайлить приложение стайлшитами, если там кастомные виджеты используются :)
И чтобы добиться одинакового вида на всех платформах :)


Название: Re: Стилизация QCombobox
Отправлено: Old от Июнь 17, 2016, 11:58
А Вы попробуйте застайлить приложение стайлшитами, если там кастомные виджеты используются :)
И чтобы добиться одинакового вида на всех платформах :)
Так пишите правильно кастомные виджеты, что бы они использовали данные из stylesheet. :)

P.S. Хотя признаю, там квесты еще те, и не хватает возможности задавать свои флаги в stylesheet. ;)


Название: Re: Стилизация QCombobox
Отправлено: Racheengel от Июнь 17, 2016, 12:04
Так пишите правильно кастомные виджеты, что бы они использовали данные из stylesheet. :)

А как может кастомный виджет получить "правильный" доступ к stylesheet?
Он его самостоятельно парсить должен, что ли? :)


Название: Re: Стилизация QCombobox
Отправлено: GreatSnake от Июнь 17, 2016, 12:12
А Вы попробуйте застайлить приложение стайлшитами, если там кастомные виджеты используются :)
И чтобы добиться одинакового вида на всех платформах :)
В данном случае разговор идёт про делегаты, причём унаследованные именно от QStyledItemDelegate, с которым не должно быть проблем с CSS.
Да и почему они должны быть, если QComboBox::view() использует его.

Есть подозрение, что ТС нас вводит в заблуждение.
Судя по описанию CSS никакой галочки в принципе быть не должно и эти настройки не должны влиять на view.
И кстати, как устанавливается этот CSS?


Название: Re: Стилизация QCombobox
Отправлено: Old от Июнь 17, 2016, 12:15
А как может кастомный виджет получить "правильный" доступ к stylesheet?
Он его самостоятельно парсить должен, что ли? :)
Виджету будет настроена палитра, цвета для отрисовки придется брать оттуда, а не с потолка. :)
Это же относится ко всем остальным пропертям.


Название: Re: Стилизация QCombobox
Отправлено: WereWind от Июнь 17, 2016, 13:42
Есть подозрение, что ТС нас вводит в заблуждение.
Не ввожу. Вот так выглядит менюшка, если просто перетащить на форму в криэйторе комбобокс и приписать ему стайлшит из первого поста.
(https://postimg.org/image/8a2f5a5zb/)

Если же сверху накатить делегат, то все становится скучнее
(https://postimg.org/image/op6yix9fr/)

Мне, в общем-то, все равно, каким методом увеличивать айтем комбобокса, если это можно сделать через QSS, я буду толкьо рад


Название: Re: Стилизация QCombobox
Отправлено: GreatSnake от Июнь 17, 2016, 13:54
Не ввожу. Вот так выглядит менюшка, если просто перетащить на форму в криэйторе комбобокс и приписать ему стайлшит из первого поста.
Понятно, значит это убунта что-то шаманит.

Цитировать
Мне, в общем-то, все равно, каким методом увеличивать айтем комбобокса, если это можно сделать через QSS, я буду толкьо рад
Код
CSS
QComboBox QListView::item { margin: 20px }


Название: Re: Стилизация QCombobox
Отправлено: WereWind от Июнь 17, 2016, 15:01
Не помогло. По умолчанию в кб стоит некий QComboboxListView. который, судя по всему, скрытый и добраться до него у меня не вышло. твой КСС на него не действует. Если прописать в view кб QListView, то ксс работает, но у QListView нет выбранного в данный момент элемента, поэтому галочка пропадает.

Я попробуй сейчас повыдирать paintEvent из QComboboxListView, посмотрю что выйдет


Название: Re: Стилизация QCombobox
Отправлено: titan83 от Июль 13, 2016, 16:59
ТС, использую такой стайл:
Код:
QComboBox QAbstractItemView::item { margin-top: 25px; }
Но у комбобокса должен быть обязательно назначен делегат, наследуемый от QStyledItemDelegate.
Код:
combobox->setItemDelegate(new QStyledItemDelegate);
Работает, точно.