Как поменять stylesheet у одной ячейки qt
Перейти к содержимому

Как поменять stylesheet у одной ячейки qt

  • автор:

Как изменить стиль столбца/строки с помощью 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: icons/sun-black.svg icons/sun-white.svg

Как реализовать аккордеон на 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

Яков Е @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

Яков Е @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

Яков Е @Zifix Куратор тега Qt
gense, о каком «неподходящем» железе речь, можно примеры? Есть и софтварный рендер.
gense @gense Автор вопроса

— Куча проблем из-за аппаратного ускорения отрисовки. На офисной Win-машинке со слабым GPU и отсутствием поддержки OpenGL 2.0 придётся использовать жуткие костыли в виде ANGLE, иначе просто ничего не будет запускаться. С ноутбуками и встройками от Intel/AMD тоже всё не очень гладко и куча проблем;

Первое попавшееся из нагугленного. Из поста с ЛОРа двухлетней давности.
spoiler
Ссылки не даю чтобы че-нибудь тут не нарушить, но легко нагуглить по фрагменту

Zifix

Яков Е @Zifix Куратор тега Qt

0. Ссылки на ЛОР ничего не нарушают.
1. Вы давно видели машины без поддержки OpenGL 2.0, который был представлен в сентябре 2001 года?
2. ANGLE — в целом рабочий вариант.
3. Как и говорится в том треде, у каждого тулкита своя область применения, но для нестандартных анимированных интерфейсов (особенно, если не ресайзятся) — однозначно QML лучше.
4. Без конкретики не очень понятно, о каких именно проблемах на встройках идет речь, скажем у меня на Intel HD 2000 все идеально.

gense @gense Автор вопроса

Яков Е,
1. Сервера на зионах, оптеронах, виртуалки, облака. Т.е. 99% случаев с арендованным сервером. Это конкретно вот мой случай. Хотя, немного и специфичный, но вот конкретный и вещественный. Можно, конечно, с софтверной реализацией этой библиотеки по. копаться, но оно нужно?
2. в целом
3. Ну.. возможно, есть у него своя ниша.
4. — Доктор, у меня колено болит.
— Странно, у меня такое же колено и не болит )))
Не знаю, но тема на лоре всего двухлетней давности. И пока изучал вопрос, много раз натыкался на свежие описания подобных проблем с заключением о неготовности этого продукта. Потому и выбрал старые и проверенные временем виджеты.

Zifix

Яков Е @Zifix Куратор тега Qt

gense,
1. GUI программы на серверах, серьезно?
2. Оно работает. Да, через костыли, но юзеру-то какая разница?
3. Вы тред-то читали?
4. Ваше право, я допускаю, что некоторые вещи стоит делать на виджетах, но это гораздо более трудоемко и криво по итогу.

gense @gense Автор вопроса

Яков Е,
1. Да, это не моя сумасшедшая задумка, это специфика конкретно этого продукта. Они не всегда так используются, но очень часто.
4. А в чем кривость? Пока единственная проблема, с которой я столкнулся это что виджет не может рисовать за своим пределом, но и это решается. «Да, через костыли, но юзеру-то какая разница?» ))

Zifix

Яков Е @Zifix Куратор тега Qt

gense, вы пробовали делать анимации интерфейса на виджетах? Лейауты сразу идут лесом, и начинается ручное позиционирование. На QML такое раз в 10 проще. QSS мало того, что забагованные, так ещё и деревянные, шаг влево-вправо, и здравствуй отрисовка руками через QPainter.

Конфликт Stylesheet и setbacgroundcolor

Author24 — интернет-сервис помощи студентам

в процессе работы из кода, нужно поменять цвет ячеек.(не всех разом а одной конкретной)
так вот, пока не применяется стиль 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 ,поменять фон рамки ? И если да ,то каким образом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *