В большинстве родных стилей граница рисуется остальной частью кнопки с использованием встроенной функциональности и ее элементов ts нельзя заменить один за другим. Как только вы представите свой собственный стиль, монолитный родной стиль ушел. Таким образом, вам нужно будет заменить все функции, предоставляемые родным стилем, включая границу, фоновый градиент и т. Д. Вам нужно будет настроить его, чтобы «соответствовать» родному стилю, если вам это нужно.
Здесь вам необходимо полностью пересмотреть границу: в минимальной степени предоставить ручку (border:
). Радиус имеет смысл только с пером. Вам также необходимо переопределить фон, если вы его позаботитесь, переопределить все переключатели состояния кнопки и т. Д. Вы начинаете с незакрепленной кнопки!
Снимок экрана ниже демонстрирует его хорошо. Слева у вас есть собственная кнопка в стиле Mac, справа у вас есть кнопка с только ее границей, определенной заново. Очевидно, что фон состояния по умолчанию также должен быть скорректирован так же, как и в случае с платформой в этом случае, и необходимо добавить некоторый запас.
Qt действительно не переделывает современные родные стили целиком с нуля, поэтому вы не можете настроить их отдельные элементы. Это будет слишком много работы и постоянно движущейся цели. Раньше это делалось для старого стиля Windows-95/NT. Начиная с стиля XP, было решено, чтобы API-интерфейсы платформы отображали растровые изображения визуального стиля. Подобная вещь предположительно происходит на OS X. Это также причина, по которой вы не можете использовать стили fancier XP/Aqua/Mac Qt за пределами своей собственной платформы: соответствующих родных API нет, и, таким образом, стиль отключен.
// https://github.com/KubaO/stackoverflown/tree/master/questions/styledbutton-20642553
#include <QPushButton>
#include <QHBoxLayout>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a{argc, argv};
QWidget w;
QHBoxLayout layout{&w};
QPushButton button1{"Default"};
button1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
layout.addWidget(&button1);
QPushButton button2{"Styled"};
button2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
button2.setStyleSheet(
"* { border: 2px solid #8f8f91; border-radius: 12px; background-color: #d02020; }"
"*:pressed { background-color: #f6f7fa; }");
layout.addWidget(&button2);
auto pal = w.palette();
pal.setBrush(QPalette::Background, Qt::darkBlue);
w.setPalette(pal);
w.show();
return a.exec();
}
+1 для автономного кода! Браво! –
Вам нужно показать свой код, иначе я не буду знать, как вам помочь. Я редактировал код ниже, чтобы показать, что фон правильно обрабатывается по краям. –
Проблема решена. Все, что я должен был сделать, это установить атрибут 'Qt :: WA_TranslucentBackground '' на кнопку. (Код, показанный выше.) – Olumide