Таблица стилей QT для цвета HLine/VLine

Я довольно новичок в этой вещи QT, и это целая система таблиц стилей. Мой фон HTML/CSS помогает немного понять систему, но многие вещи просто происходят без видимой причины .... или не случаются

Во всяком случае, тайна HLINE и VLINE и как изменить цвет линий - это просто загадка для меня. Я узнал из других вопросов и различных форумов, что он связан с элементами QFrame. И я могу изменить цвет линии, если я просто использую что-то вроде

QFrame
{
color: red;
}

Но это, конечно же, меняет цвет тонны других вещей, которые также используют QFrame. Я мог бы, конечно, пойти в элемент HLINE и поставить «color: red»; там, и это работает отлично, но для моего приложения требуется, чтобы я помещал все в одну таблицу стилей, которая загружается в приложение. Поэтому стиль отдельных элементов не является вариантом.

Решение было бы чем-то вроде

QFrame HLine, QFrame VLine
{
color: red;
}
3
nl ja de
Не будет ли проще связаться с QT Support?
добавлено автор Morpheus, источник

3 ответы

QFrame[frameShape="4"] /* QFrame::HLine == 0x0004 */
{
    color: red;
}

QFrame[frameShape="5"] /* QFrame::VLine == 0x0005 */
{
    color: green;
}
10
добавлено
Примечание: color работает только в том случае, если frameShadow установлен в Plain - значение по умолчанию для HLine и VLine равно QFrame :: Sunken . См. Мой ответ для более подробной информации.
добавлено автор waldyrious, источник

HLine and VLine are tricky to style. It's worth taking a look at the "Detailed Description" section of the documentation. For a quick fix, I found that this set of rules allows customizing the appearance of such lines via stylesheet in a reliable and relatively clean manner:

QFrame[frameShape="4"],
QFrame[frameShape="5"]
{
    border: none;
    background: red;
}

Это работает независимо от свойства frameShadow , что в противном случае влияет на их внешний вид и эффект правил стиля. Имейте в виду, что ширина строк не 1px по умолчанию - это можно изменить с помощью min-width , max-width , min-height или max-height , в зависимости от ситуации.

Для более подробного обзора моих результатов прочитайте.


Большинство QFrame имеют QFrame :: Plain frameShape по умолчанию, но HLine и VLine 'по умолчанию frameShape: QFrame :: Sunken . Это означает, что они не являются линиями, а тонкие коробки, которые содержат среднюю линию, которая используется для обеспечения 3D-эффекта. Из документации :

Средняя ширина линии определяет ширину дополнительной строки в середине кадра, которая использует третий цвет для получения специального 3D-эффекта. Обратите внимание, что средняя строка отображается только для кадров Box, HLine и VLine, которые подняты или затонуты.

Если вы установили frameShape в Plain, эта средняя линия все еще будет видна и может быть написана с помощью свойства color (обратите внимание: это not a background-color code> или border-color !)

Но это не работает для HLine/VLine, которая осталась с положением Sunken по умолчанию. Один из способов исправить это может заключаться в том, чтобы установить отдельные стили для QFrames Plain и Sunken с помощью селекторов атрибутов с десятичными значениями перечислений свойств (которые описаны в документации в hehadecimal), например:

/* Reference (from doc.qt.io/qt-5/qframe.html#types):
 * - frameShape[4] --> QFrame::HLine = 0x0004
 * - frameShape[5] --> QFrame::VLine = 0x0005
 * - frameShadow[16] --> QFrame::Plain = 0x0010 (default for most widgets)
 * - frameShadow[48] --> QFrame::Sunken = 0x0030 (default for HLine/VLine)
 */
QFrame[frameShape="4"][frameShadow="16"],
QFrame[frameShape="5"][frameShadow="16"]
{
    ...
}

QFrame[frameShape="4"][frameShadow="48"],
QFrame[frameShape="5"][frameShadow="48"]
{
    ...
}

но поскольку стили, которые работают для HLine/VLine с QFrame :: Sunken, также работают для тех, у кого QFrame :: Plain , обычно это отходы. Я показываю их выше для образовательной ценности только о том, как использовать селектора атрибутов.

Лучший подход - рассматривать QFrame как поле, в котором он находится, и либо (1) установить border-top , либо border-right в сочетании с max- height: 0px (или max-width для VLine), чтобы внутренняя часть поля не занимала места в макете; или (2) используйте цвет фона в сочетании с границей : none (в этом случае max-height/width должно быть 1 или больше, иначе QFrame невидим). Последнее решение я бы рекомендовал, как показано в первом блоке кода выше.

Надеюсь это поможет!

5
добавлено

, но мое приложение требует, чтобы я помещал все в одну таблицу стилей, которая   загружается в приложение.

Вы можете использовать Разрешение конфликтов . Предположим, что у вас есть объект QMainWindow с большим количеством виджетов на нем. Установите эти таблицы стилей для таблицы стилей maindionw :

QLabel#label{
    background-color: rgb(255, 170, 255);
}
QPushButton#pushButton{

    color: rgb(0, 0, 255);
}
QFrame#line{
    background-color: rgb(0, 170, 255);
}

The first CSS just changes a QLabel name label on your mainwindow and set its back color to rgb(255, 170, 255). The next will change text color of a QPushButton named pushButton to (0,0,255);. The third one change property of a line.Lines are just a QFrame.
So the solution that I can offer is to place your CSS in a file and then load this file using QFile and QTextStream and then set the contents of the file for CSS of your main winodw or main widget using setStyleSheet ( const QString & styleSheet ) function. or If you are using creator just right click on your main window and select change stylesheet and then paste your css. But bear in mind that you should use conflict resolution.

1
добавлено
Я не эксперт, но знаю, что у вас могут быть классы и идентификаторы. Здесь есть те же самые понятия. Если вы собираетесь изменить класс объектов, строка QPushButtons использует QPushButton {...}, и если вы хотите изменить только одну из ваших кнопок, используйте QPushButton # name_of_btn {...}. hmmm используя RGB! Это просто потому, что мастер создателя для создания правил CSS использует RGB. :)
добавлено автор s4eed, источник
Я также отредактировал свой ответ.
добавлено автор s4eed, источник
Это не отвечает на мой вопрос о том, как я должен перейти к свойствам HLine или VLine. С разрешением конфликта я мог бы сделать: QFrame # Line {color: red; } И это успешно изменит цвет линии на красный, но если я добавлю вторую строку, это будет по умолчанию. Идея единственного файла CSS заключается в том, что всякий раз, когда мы хотим создать другое приложение с таким же взглядом, мы можем просто загружать в CSS, и все элементы будут одинаковыми, без маркировки. Кроме того, на стороне заметки ... почему все используя RGB? Что случилось с HEX?
добавлено автор K120, источник
Хорошо, я чувствую себя действительно немым в данный момент .... Я узнал, что просто использовать LINE достаточно, чтобы изменить свойства HLine и VLine. Я искал что-то трудное, как QLine или QHLine, или QFrame :: HLine .... это просто LINE ... argh ... Спасибо за ваше время, это был не тот ответ, который я искал, но это в конечном итоге привело меня к просмотру таблицы CLASS в инспекторе объектов.
добавлено автор K120, источник
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

CSS — русскоговорящее сообщество
CSS — русскоговорящее сообщество
1 502 участник(ов)

Сообщество любителей CSS Возникли проблемы с CSS? – пиши сюда, обсудим и предложим самое лучшее решение Работа: @css_ru_jobs Правила: https://teletype.in/@css_ru/r1EWtQ2w7 Приходите в наши чаты @javascript_ru и @frontend_ru Флуд: @css_flood

Чат — Типичный Верстальщик
Чат — Типичный Верстальщик
1 080 участник(ов)

Основной канал: @tpverstak Обратная связь: @annblok Все ссылки на соц.сети проекта: http://taplink.cc/tpverstak ПРАВИЛА ЧАТА — https://teletype.in/@annblok/BygPgC3E7

Qt
Qt
703 участник(ов)

Группа взаимопомощи Qt.Делимся советами и помогаем друг другу. Наш информационный канал @ProQt Полезная информация для начинающих: #newcomer Познавательная информация: #fyi #didyouknow Наши друзья: Чат с/с++ @ProCxx

Веб-Технологи: UI/UX, Вёрстка, Фронтенд
Веб-Технологи: UI/UX, Вёрстка, Фронтенд
167 участник(ов)

Всё про веб-дизайн и вёрстку. А также: HTML, CSS, флекс и бутстрапы, шаблонизаторы, препроцессоры, методологии, аглифаеры, улучшаторы и обфускаторы. Обсуждаем темы юзабилити, устраиваем А/В тесты лендингов, и проводим аудит.

DTP :: @DTPublish
DTP :: @DTPublish
147 участник(ов)

Обсуждаемые темы: полиграфия, препресс, верстка, дизайн, иллюстрации, скрипты, плагины. Канал - @DTPublishing

css_jobs
css_jobs
26 участник(ов)

Чат для вопросов по css и html: @css_ru Флуд: @css_flood Канал с вакансиями и резюме: @css_jobs_feed

css_флуд
css_флуд
10 участник(ов)