Название: Не могу разобраться как применить QSS к строкам QTableWidget Отправлено: xintrea от Январь 14, 2014, 21:18 Пытаюсь стилизовать Qt-приложение под Андроид.
Нужно сделать высокими, высотой минимум 32-42 пикселя строки в QTableWidget. Делаю это через QSS, для разных платформ свой QSS. Максимум, чего смог добиться, представлено на картинке (см. вложение внизу). Видно, что к строкам коричневый цвет (brown) применяется и больше ничего. Видно, что синий цвет (blue) применяется к прочим элементам, в частности, к интересующим меня элементам нумерации строк. QSS следующий: Код
А нужно просто сделать так, чтобы сверху и снизу строки таблицы были поля из указанного количества пикселей. В QTreeView и QListView достаточно указать margin и строки "разряжаются" по вертикали: QTreeView::item, QListView::item { margin: 8px 0px 8px 0px; } А для QTableWidget я и margin, и height, и min-height указываю, и толку никакого, хотя цвет применяется. Название: Re: Не могу разобраться как применить QSS к строкам QTableWidget Отправлено: carrygun от Январь 15, 2014, 04:46 Я в таких случаях обычно переопределяю sizeHint() у QStyledItemDelegate, ну а потом у вьюхи setItemDelegate() собственно.
Например: Код
Название: Re: Не могу разобраться как применить QSS к строкам QTableWidget Отправлено: xintrea от Январь 15, 2014, 09:53 Я в таких случаях обычно переопределяю sizeHint() у QStyledItemDelegate, ну а потом у вьюхи setItemDelegate() собственно. Например: Код
То есть, оформление хардкодите в код?? Название: Re: Не могу разобраться как применить QSS к строкам QTableWidget Отправлено: carrygun от Январь 15, 2014, 10:13 Конкретно высоту/ширину - да. То, что можно сделать средствами QSS - уношу в QSS. К слову недавно пришлось так же перекрывать paint() у QStyledItemDelegate. Потому что item'ы у вьюх нельзя настроить для конкретного столбца.
Название: Re: Не могу разобраться как применить QSS к строкам QTableWidget Отправлено: xintrea от Январь 15, 2014, 20:07 Конкретно высоту/ширину - да. То, что можно сделать средствами QSS - уношу в QSS. К слову недавно пришлось так же перекрывать paint() у QStyledItemDelegate. Потому что item'ы у вьюх нельзя настроить для конкретного столбца. Вот смотри. Для QComboBox существует такая же проблема - не применяется стиль для выпадающего списка. Я обошел ее путем создания маленького класса-наследника QComboBox, в котором в качестве itemDelegate устанавливаю делегат, восприимчивый к QSS: Код: MtComboBox::MtComboBox(QWidget *parent) : QComboBox(parent) И стилизация выпадающего списка в QComboBox заработала нормально (Вместо QComboBox теперь пользуюсь MtComboBox). Я попытался сделать то же самое и для QTableWidget: Код: MtTableWidget::MtTableWidget(QWidget *parent) : QTableWidget(parent) Однако у объекта MtTableWidget стилизация для ячеек так и не заработала. Вот не могу придумать, что еще надо дописать чтоб применялись стили QSS. Хардкодить ширину-высоту-отступы в код не хочется, все-таки этим QSS должно управлять. Название: Re: Не могу разобраться как применить QSS к строкам QTableWidget Отправлено: carrygun от Январь 16, 2014, 04:41 Можно было и не наследоваться, а написать в духе:
Код
Это ладно. Но я не особо в курсе насчет тонкостей QSS, единственно понятно, что полностью стилизовать приложение с его помощью не очень просто. Особенно забавно что много моментов в справке отложено на будущие релизы. Как вариант можно еще вот что попробовать: раз используется QTableWidget, то попробовать задать стили для QTableWidgetItem вместо ::item. Название: Re: Не могу разобраться как применить QSS к строкам QTableWidget Отправлено: xintrea от Март 09, 2014, 20:51 Я в таких случаях обычно переопределяю sizeHint() у QStyledItemDelegate, ну а потом у вьюхи setItemDelegate() собственно. А ты уверен, что такой способ работает для QTableView или QTableWidget? Я сейчас сделал именно как ты сказал: 1. Сделал класс MtStyledItemDelegate как производный от QStyledItemDelegate: Код: #ifndef __MTSTYLEDITEMDELEGATE_H__ 2. Применил этот делегат к QTableView: Код: tableView=new QTableView(this); И толку никакого. Высота ячеек не увеличилась. Что я делаю не так? Название: Re: Не могу разобраться как применить QSS к строкам QTableWidget Отправлено: Kolobok от Март 10, 2014, 21:34 Код: tableView->verticalHeader()->setDefaultSectionSize(45); Название: Re: Не могу разобраться как применить QSS к строкам QTableWidget Отправлено: xintrea от Март 11, 2014, 07:23 Код: tableView->verticalHeader()->setDefaultSectionSize(45); Мы говорим о строках таблицы, а не о заголовке. Название: Re: Не могу разобраться как применить QSS к строкам QTableWidget Отправлено: Bepec от Март 11, 2014, 08:49 Header есть вертикальный и горизонтальный.
Горизонтальный - столбцы, вертикальный - строки. |