Я хочу, чтобы углы были закруглены и зависали для QPushButton в дизайнере Qt. Изменение таблицы стилей не влияет. Что я делаю неправильно?
QPushButton#pushButton_3{
background: rgb(170, 170, 255);
border: 2px solid rgb(0, 170, 255);
border-style: outset;
border-width: 2px;
border-radius: 20px;
color: white;
}
QPushButton:hover#pushButton_3{
background-color: rgb(0, 255, 255);
border: 2px solid (0, 255, 255);
}
Вот что я получаю, когда указанная выше таблица стилей установлена:
Уменьшил радиус до меньшего значения. это сработало
Используйте меньшие значения для border-radius
, обычно половину стандартного размера шрифта (2 <= радиус <= 10).
Радиус границы QSS должен имеет приемлемое значение.
Частный QStyleSheetStyle нормализует радиус границы (или, лучше, все четыре радиуса границы) на основе ограничивающего прямоугольника виджета, который включает размер (размеры) границы.
Всякий раз, когда радиус границы Любые превышает размер, относящийся к ее углу, все радиусы игнорируются.
Например, если прямоугольник виджета имеет высоту 10, сумма его радиусов top-left
и bottom-left
должен быть равен или меньше 10, иначе левый угол будет квадратным.
Обратите внимание, что виджеты обычно учитывают границу только для подсказки размера, а не подсказки размера минимум, и это поведение также может меняться в зависимости от текущего стиля.
Кнопка обычно создается с использованием pixelMetric()
и fontMetrics()
текущего стиля, и, поскольку довольно стандартная высота кнопки составляет ~ 30 пикселей, учитывая вышеизложенное, указанный border-radius
является чрезмерным: сумма любого углового компонента всегда больше, чем высота виджета. , поэтому радиусы игнорируются, а граница будет квадратной.
Итак, как установить правильный радиус границы?
Простой ответ: используйте «маленькие» значения, обычно не более чем в два или четыре раза превышающие ширину границы.
Ответ действительный более сложен, поскольку нам нужно учитывать, что виджеты часто имеют некоторый отображаемый текст, и любая современная ОС поддерживает оба масштабирования шрифта и на экранах с высоким разрешением.
QSS поддерживает различные типы длины, отличные от стандартного px
:
px
: пиксели (как правило, физические пиксели, AFAIK, фактическое значение зависит от ОС и их реализации High DPI);pt
: размер одной точки (на основе DPI экрана, AFAIK, используется только для свойств текста и игнорируется для размеров виджета/границы);em
: ширина шрифта в em (на основе отображаемый шрифт);ex
: x-высота шрифта (как указано выше);Если вы хотите должным образом поддерживать любую современную ОС, вам, вероятно, потребуется использовать любое из двух последних значений, и это еще одна причина, по которой важно установить глобальную таблицу стилей для приложения: пока приложение создано, вы можете знать шрифты по умолчанию (или импортированные) и, в конечном итоге, установить основную таблицу стилей с отформатированной шириной или размером на основе текущего соотношения пикселей устройства и показателей шрифта.
Радиус в 20 пикселей, безусловно, слишком много, когда граница диаметр больше, чем наименьший размер прямоугольника, она будет проигнорирована. Уменьшите его до меньшего значения, например, 4 или 6. Кроме того, избегайте ненужных пробелов и не смешивайте пробелы с табуляциями (даже если это не проблема для таблиц стилей, это все равно считается плохой практикой).