Как изменить стиль столбца/строки с помощью Qt Style Sheets?
1)Подскажите, каким образом можно установить фон для 1 столбца/строки?
Есть ли возможность не создавать QFrame для каждой ячейки столбца/строки? 2)Каким образом можно установить только вертикальные границы столбцов в таблице? UPD: С кодом в общем то проблем нет, так как его нет 🙁 Я не могу найти в документации каким образом с помощью таблицы стилей или каких-либо методов можно реализовать заливку одного столбца/строки и как можно разделить только по вертикали. Таким образом выглядит моя таблица: Для левых двух столбцов создавался QFrame, в правом ничего. Можно заметить небольшие пробелы между ячейками, поэтому заливка QFrame не подходит
def _createtable(self): table = QTableWidget(43,5) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalPolicy(0) sizePolicy.setHeightForWidth(table.sizePolicy().hasHeightForWidth()) table.setSizePolicy(sizePolicy) table.setMinimumSize(QSize(400,0)) table.setMaximumSize(QSize(2000,2000)) table.setSizeIncrement(QSize(0,0)) table.setLayoutDirection(Qt.LeftToRight) table.setFrameShadow(QtWidgets.QFrame.Raised) table.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) table.setShowGrid(False) table.setGridStyle(Qt.SolidLine) table.verticalHeader().setVisible(False) table.setObjectName("Table") table.setHorizontalHeaderLabels([ 'Product','Base output','Base\nconsumption', 'Productivity','Buildings\nRequired' ]) table.horizontalHeader().setSectionResizeMode( QtWidgets.QHeaderView.Stretch) table.verticalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) for row in range(table.rowCount()): gbox = QGridLayout() framebox = QFrame() framebox.setLayout(gbox) table.setCellWidget(row,2,framebox) hbox8 = QHBoxLayout() hbox8.setAlignment(Qt.AlignCenter) framebox2 = QFrame() framebox2.setLayout(hbox8) table.setCellWidget(row,3,framebox2) hbox9 = QHBoxLayout() framebox3 = QFrame() framebox3.setLayout(hbox9) table.setCellWidget(row,0,framebox3) farmer = QLabel() farmer.setPixmap(QPixmap(':Portrait_Farmer').scaled(25,25)) worker = QLabel() worker.setPixmap(QPixmap(':Portrait_Worker').scaled(25,25)) artisan = QLabel() artisan.setPixmap(QPixmap(':Portrait_Artisan').scaled(25,25)) engineer = QLabel() engineer.setPixmap(QPixmap(':Portrait_Engineer').scaled(25,25)) investor = QLabel() investor.setPixmap(QPixmap(':Portrait_Investor').scaled(25,25)) tourist = QLabel() tourist.setPixmap(QPixmap(':Portrait_Tourist').scaled(25,25)) scholar = QLabel() scholar.setPixmap(QPixmap(':Portrait_Scholar').scaled(25,25)) for pics in (farmer,worker,artisan,engineer,investor,tourist,scholar): pics.setStyleSheet("background-color: ") column_pop = column1.pop(0) pb = QPushButton(QIcon(":"+ column_pop),'') pb.setMinimumSize(35,35) pb.setMaximumSize(35,35) pb.setStyleSheet("background-color: brown") hbox9.addWidget(pb) widget = QTableWidgetItem(column2.pop(0)) widget.setTextAlignment(Qt.AlignCenter) table.setItem(row%60,1,widget) a = column3.pop(0)
А это часть кода для таблицы стилей:
.QFrame < background-color: #664127; border-radius: ; >QTableView < column3-background-color: qlineargradient(x1: 0, y1: 0, x2: 0.5, y2: 0.5, stop: 0 #FF92BB, stop: 1 white); >#Table < background-color: #805130; font-size: 20px; >QHeaderView::section
Вопросы с меткой [qss]
По вопросам, связанным с таблицами стилей (Style Sheets) Qt, которые позволяют декларативную настройку объектов Qt.
214 вопросов
Новые Текущие Конкурсные Неотвеченные Ещё
- Конкурсные 0
- Неотвеченные
- Цитируемые
- Рейтинг
- Неотвеченные (мои метки)
Как узнать размеры padding задаваемые через setStyleSheet?
Есть QLabel с фиксированной шириной, с заданными стилями: self.name.setStyleSheet(«QLabel#name
Вопрос про файл QRC
Поместил файл QSS в ресурсы. Получился такой файл QRC:
Как реализовать аккордеон на QSS в Qt Designer?
Возможно ли в Qt Designer и QSS создать такой виджет, где будет расположено несколько элементов друг под другом, рядом с ними кнопки, а по нажатии на кнопку около соответствующего элемента под ним .
Анимация кнопки при нажатии и наведении на неё
Пытаюсь найти примеры как задать анимацию кнопки при нажатии и наведении на неё. Пока без успешно. Прошу поделиться секретными манускриптами. В идеале, хочу совместить qss анимацию c QPushButton.
Изменение цвета текста всплывающей подсказки QToolTip
Как изменить цвет текста всплывающей подсказки QToolTip или её фон? main.py: from PyQt5.Qt import * class Example(QWidget): def __init__(self): super(Example, self).__init__() .
57 показов
Стиль QScrollBar для QTreeWidget
Никак не могу задать свой стиль скроллинга для QTreeWidget, к примеру схожий код отлично работает в QTableWidget или QPlainTextEdit а вот QTreeWidget вообще ни как не реагирует на код QSS, даже ошибок .
100 показов
Как изменить цвет закраски при изменении положения QSizeGrip?
Как изменить цвет заливки с белого на какой-нибудь другой при изменении положения QSizeGrip? Как убрать белую заливку ? from PyQt5.QtCore import (Qt, QRect) from PyQt5.QtGui import (QBrush, .
Как добраться до элемента фокуса в Qt?
Нужно через stylesheet изменить цвет, размер и размер границы элемента focus (при перемещении через Tab) для QCheckBox и QPushButton. (Стиль Breeze на linux) Подскажите как? Я могу изменить .
2k показов
Как сделать красивый ползунок, QSlider?
Не понимаю, как сделать вот такой ползунок: Как сделать так, чтобы оставался синий след и сам он круглый был.
49 показов
Как мне привязать QScrollArea к QLabel, чтобы все работало?
у меня не выходит вставить QLabel в QScrollArea. Форму делаю в Qt Dtsigner. main.py: from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.uic import loadUi class DerNeXApp(QMainWindow): .
Почему текст виджета QLabel не устанавливается в нужную точку?
Решил сделать программу с «кастомным» интерфейсом. Так как нет стандартной рамки Windows, то название программы я решил вставить через QLabel, но я не понимаю почему текст не встаёт в .
123 показа
Как в QSS прописать путь к изображению для стрелок в QScrollArea?
Пытался сделать таблицу стиля для виджета QScrollArea. Заметил, что можно изменить внешний вид стрелок, которые находятся по краям полос прокрутки. Для этого нужно прописать путь к нужным .
529 показов
Как установить border для icon на QPushButton?
Установив свойство icon для QPushButton, заметил, что иконка игнорирует border, прописанный в StyleSheet. Иконка должна закруглиться по краям. Как это можно исправить? StyleSheet: QPushButton:checked .
428 показов
Изменение заднего фона открывающегося меню QComboBox, drop-arrow и scrollbar
Есть код, в котором есть QComboBox. Мне нужно добавить туда стрелочку и когда comobox закрыт — она должна смотреть направо, а когда combobx открывается, то она должна поворачиваться на 90 градусов .
123 показа
Проблема с присвоением нужных цветов через StyleSheet
Не могу изменить текст с красного на зеленый в элементе QTextEdit. Выбивает вот такую вот ошибку: AttributeError: ‘PyQt5.QtCore.pyqtBoundSignal’ object has no attribute ‘setStyleSheet’ class .
Существует ли какой-то оверхед при использовании CSS в Qt?
Надеюсь, он при этом не подключает какой-нибудь HTML движок для рендера GUI? Или он просто переводит это всё в стандартные QPalette и т.д. и устанавливает свойства отображения виджетов через стандартные API? Как это вообще работает? Я не нагуглил подробной инфы по этому поводу.
- Вопрос задан более трёх лет назад
- 146 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 2
Qt сами рекомендуют стилизовать контролы именно через setStyleSheet().
Под капотом, думаю, что просто задаются значения набору параметров виджета, а дальше видже при отрисовке просто использует эти значения, т.е. каждый кадр парсинг стиля не происходит.
Безусловно, нужно время, чтобы распарсить текст стилей, но оно мизерное, в реальной работе я не замечал каких-то проблем с отрисовкой.
Через stylesheet можно задавать значение и своим параметрам, достаточно только объявить их определенным образом.
Ответ написан более трёх лет назад
Нравится 2 2 комментария
gense @gense Автор вопроса
Оверхед при инициализации приложения это не так значимо, вопрос не используют ли они при этом, к примеру, какие-то другие методы отрисовки уже при рендере. На своей практике я тоже не заметил разницы, но мало ли что потом там вдруг может вылезти в каких-то специфичных ситуациях.
gense, А какие альтернативы? Рисовать контролы вручную? Даже если будет быстрее, то трудоемкости в разработке это добавит на порядок и гибкости изменений уже не будет.
Яков Е @Zifix Куратор тега Qt
>Надеюсь, он при этом не подключает какой-нибудь HTML движок для рендера GUI?
Нет, не подключает, но для нестандартных интерфейсов в 2019 году стоит брать QML, а не QSS. Виджеты плохо дружат с HiDPI экранами, там есть баги, которые не фиксятся уже 10 лет, и вообще — QML гораздо более гибкий и красивый.
Ответ написан более трёх лет назад
gense @gense Автор вопроса
>с HiDPI экранами
Насчет красоты, ну не знаю, мне как раз Qt и нравится своим балансом между низкоуровневостью (С++) и удобством, что в большей степени относится к виджетам. К тому же, QML, насколько я начитался по форумам, до сих пор имеет кучу performance issues и вообще сыроват, нет?
gense @gense Автор вопроса
По багам, кстати, вообще удивляюсь как такое может быть, но там годами не чинят даже базовый функционал их идешки. Т.е. у Qt Creator’a фактически нет тёмных тем, потому что при темной теме становится нечитаемым Style Sheet Editor. Репорту скоро 5 лет уже https://bugreports.qt.io/browse/QTCREATORBUG-14164
Такое я, пожалуй, только в андроид СДК видел, когда прямо в книгах по андроиду описываются костыли как обходить те или иные баги, которые там висят годами )))
Яков Е @Zifix Куратор тега Qt
Qt::AA_EnableHighDpiScaling же
Это не решает, например, проблему корректного масштабирования фона, заданного через QSS. Я эти грабли ещё в 2014 году собирал, точно уже не помню, помню только что было больно.
К тому же, QML, насколько я начитался по форумам, до сих пор имеет кучу performance issues и вообще сыроват, нет?
Вообще говоря QML компоненты тоже на плюсах написаны, и работают весьма и весьма шустро. Сыроват он был пять лет назад, а после выхода Qt Quick Controls 2 — всё стало хорошо.
Т.е. у Qt Creator’a фактически нет тёмных тем, потому что при темной теме становится нечитаемым Style Sheet Editor.
Просто этот Style Sheet Editor никому не нужен сегодня.
gense @gense Автор вопроса
Просто этот Style Sheet Editor никому не нужен сегодня.
Это политика самих Qt и выдача желаемого за действительное ) Картина, насколько я могу судить, пока немного обратная.
после выхода Qt Quick Controls 2 — всё стало хорошо
Ну, как минимум, есть проблема с железной частью. Виджеты рендерятся софтверно, а для QML/Qt Quick нужен OpenGL. С одной стороны, оно должно быть быстрее, но по факту это артефакты и кривость на неподходящем железе, А учитывая, что моя софтина вообще в существенной доле случаев должна запускаться на серверном железе с доступом по удаленным экранам, то вот как минимум в моем случае это вылезает серьезные вопросы.
Яков Е @Zifix Куратор тега Qt
gense, о каком «неподходящем» железе речь, можно примеры? Есть и софтварный рендер.
gense @gense Автор вопроса
— Куча проблем из-за аппаратного ускорения отрисовки. На офисной Win-машинке со слабым GPU и отсутствием поддержки OpenGL 2.0 придётся использовать жуткие костыли в виде ANGLE, иначе просто ничего не будет запускаться. С ноутбуками и встройками от Intel/AMD тоже всё не очень гладко и куча проблем;
Первое попавшееся из нагугленного. Из поста с ЛОРа двухлетней давности.
spoiler
Ссылки не даю чтобы че-нибудь тут не нарушить, но легко нагуглить по фрагменту
Яков Е @Zifix Куратор тега Qt
0. Ссылки на ЛОР ничего не нарушают.
1. Вы давно видели машины без поддержки OpenGL 2.0, который был представлен в сентябре 2001 года?
2. ANGLE — в целом рабочий вариант.
3. Как и говорится в том треде, у каждого тулкита своя область применения, но для нестандартных анимированных интерфейсов (особенно, если не ресайзятся) — однозначно QML лучше.
4. Без конкретики не очень понятно, о каких именно проблемах на встройках идет речь, скажем у меня на Intel HD 2000 все идеально.
gense @gense Автор вопроса
Яков Е,
1. Сервера на зионах, оптеронах, виртуалки, облака. Т.е. 99% случаев с арендованным сервером. Это конкретно вот мой случай. Хотя, немного и специфичный, но вот конкретный и вещественный. Можно, конечно, с софтверной реализацией этой библиотеки по. копаться, но оно нужно?
2. в целом
3. Ну.. возможно, есть у него своя ниша.
4. — Доктор, у меня колено болит.
— Странно, у меня такое же колено и не болит )))
Не знаю, но тема на лоре всего двухлетней давности. И пока изучал вопрос, много раз натыкался на свежие описания подобных проблем с заключением о неготовности этого продукта. Потому и выбрал старые и проверенные временем виджеты.
Яков Е @Zifix Куратор тега Qt
gense,
1. GUI программы на серверах, серьезно?
2. Оно работает. Да, через костыли, но юзеру-то какая разница?
3. Вы тред-то читали?
4. Ваше право, я допускаю, что некоторые вещи стоит делать на виджетах, но это гораздо более трудоемко и криво по итогу.
gense @gense Автор вопроса
Яков Е,
1. Да, это не моя сумасшедшая задумка, это специфика конкретно этого продукта. Они не всегда так используются, но очень часто.
4. А в чем кривость? Пока единственная проблема, с которой я столкнулся это что виджет не может рисовать за своим пределом, но и это решается. «Да, через костыли, но юзеру-то какая разница?» ))
Яков Е @Zifix Куратор тега Qt
gense, вы пробовали делать анимации интерфейса на виджетах? Лейауты сразу идут лесом, и начинается ручное позиционирование. На QML такое раз в 10 проще. QSS мало того, что забагованные, так ещё и деревянные, шаг влево-вправо, и здравствуй отрисовка руками через QPainter.
Конфликт Stylesheet и setbacgroundcolor
в процессе работы из кода, нужно поменять цвет ячеек.(не всех разом а одной конкретной)
так вот, пока не применяется стиль setBackgroundColor, для ячейки, работает нормально,
после применения стиля, напрочь игнорит его.
(в коде меняю естественно после применения стиля)
1 2 3 4 5 6 7
QTreeView::item { min-height: 78px; min-width: 78px; border: 1px solid #404040; background-color:rgb(0,0,0); }
цвет из кода
ui->treeWidget->topLevelItem(0)->setBackgroundColor(0,QColor(255,0,0));
если быть точнее, то при удалении из таблици стилей
border: 1px solid #404040;
background-color:rgb(0,0,0);
то, смена цвета из кода, начинает работать (но меня это неустраивает, нужен бордер в таблице)
что за косяк, и как решать?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Qtcreator.exe -stylesheet=stylesheet.css
Всем привет, решил настроить внешний вид своей любимой IDE-шчки, нашел несколько разных статей на.
Qt Stylesheet
Здравствуйте! Скажите пожалуйста, как создать CSS класс и прикрепить его к объекту. У меня есть.
StyleSheet
Есть QDialog и QLabel; Нужно чтобы лейбел при любых размерых окна отображался на 10 пикселей.
StyleSheet в qt desinger
Возможно ли с помощью styleSheet, в qt desinger ,поменять фон рамки ? И если да ,то каким образом.