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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Стилизация QCombobox  (Прочитано 8265 раз)
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));

Элементы увеличились, но из них пропала галочка отвалилась раскраска - у них теперь дефолтный цвет окна. Как лучше всего и элементы увеличить и галочку сохранить?
Записан
Bepec
Гость
« Ответ #1 : Июнь 16, 2016, 20:17 »

Стиль и QSS - это взаимозаменяемые вещи, но пользоваться ты можешь только одной из них.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Июнь 16, 2016, 23:08 »

Кастомной отрисовкой разве что... Галочка для комбобокса - вещь не типичная..
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Июнь 17, 2016, 11:19 »

Стиль и QSS - это взаимозаменяемые вещи, но пользоваться ты можешь только одной из них.
С чего это Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Июнь 17, 2016, 11:19 »

Стиль и QSS - это взаимозаменяемые вещи, но пользоваться ты можешь только одной из них.

Я бы сказал, взаимоисключающие Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #5 : Июнь 17, 2016, 11:31 »

Я бы сказал, взаимоисключающие Улыбающийся
Да почему? Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Июнь 17, 2016, 11:42 »

Я бы сказал, взаимоисключающие Улыбающийся
Да почему? Улыбающийся

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #7 : Июнь 17, 2016, 11:58 »

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

P.S. Хотя признаю, там квесты еще те, и не хватает возможности задавать свои флаги в stylesheet. Подмигивающий
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #8 : Июнь 17, 2016, 12:04 »

Так пишите правильно кастомные виджеты, что бы они использовали данные из stylesheet. Улыбающийся

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Июнь 17, 2016, 12:12 »

А Вы попробуйте застайлить приложение стайлшитами, если там кастомные виджеты используются Улыбающийся
И чтобы добиться одинакового вида на всех платформах Улыбающийся
В данном случае разговор идёт про делегаты, причём унаследованные именно от QStyledItemDelegate, с которым не должно быть проблем с CSS.
Да и почему они должны быть, если QComboBox::view() использует его.

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

Qt 5.11/4.8.7 (X11/Win)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #10 : Июнь 17, 2016, 12:15 »

А как может кастомный виджет получить "правильный" доступ к stylesheet?
Он его самостоятельно парсить должен, что ли? Улыбающийся
Виджету будет настроена палитра, цвета для отрисовки придется брать оттуда, а не с потолка. Улыбающийся
Это же относится ко всем остальным пропертям.
Записан
WereWind
Гость
« Ответ #11 : Июнь 17, 2016, 13:42 »

Есть подозрение, что ТС нас вводит в заблуждение.
Не ввожу. Вот так выглядит менюшка, если просто перетащить на форму в криэйторе комбобокс и приписать ему стайлшит из первого поста.


Если же сверху накатить делегат, то все становится скучнее


Мне, в общем-то, все равно, каким методом увеличивать айтем комбобокса, если это можно сделать через QSS, я буду толкьо рад
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Июнь 17, 2016, 13:54 »

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

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

Qt 5.11/4.8.7 (X11/Win)
WereWind
Гость
« Ответ #13 : Июнь 17, 2016, 15:01 »

Не помогло. По умолчанию в кб стоит некий QComboboxListView. который, судя по всему, скрытый и добраться до него у меня не вышло. твой КСС на него не действует. Если прописать в view кб QListView, то ксс работает, но у QListView нет выбранного в данный момент элемента, поэтому галочка пропадает.

Я попробуй сейчас повыдирать paintEvent из QComboboxListView, посмотрю что выйдет
Записан
titan83
Гость
« Ответ #14 : Июль 13, 2016, 16:59 »

ТС, использую такой стайл:
Код:
QComboBox QAbstractItemView::item { margin-top: 25px; }
Но у комбобокса должен быть обязательно назначен делегат, наследуемый от QStyledItemDelegate.
Код:
combobox->setItemDelegate(new QStyledItemDelegate);
Работает, точно.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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