Включить сглаживание для QPushButton

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

Есть ли способ включить сглаживание просто без подклассов QPushButton и дать ему нового художника? Я действительно не хочу этого делать, потому что я широко использую таблицу стилей и должен был бы создать группу QProperties для эмуляции существующей функциональности псевдосостояния.

1

Решение

Вы можете обычно установить Флаг сглаживания, на объекте QPainter, используя setRenderHints метод. Обычно это делается путем создания подкласса виджета и переопределения paintEvent.

Согласно Qt Документы для QPainter:

… Когда paintdevice является виджетом, QPainter может использоваться только внутри функции paintEvent () или в функции, вызываемой paintEvent () …

Без подклассов вы будете ограничены перехватом paintEvent с использованием Фильтр событий и установить флаг самостоятельно.

Вам нужно будет создать класс, который переопределяет обработчик событий для вашего объекта. Этот класс будет установлен с помощью QObject::installEventFilter. Этот класс должен будет отфильтровать события для обработки тех, которые вас волнуют (QPaintEvent). Затем он должен будет создать объект QPainter, который принимает исходный объект (используя второй конструктор) как его устройство, как показано в этом пост qtforum. Это работает, потому что QWidget наследуется от QPaintDevice.

...
myView::handlePaintEvent(QObject *obj, QEvent *eve)
{
QPainter painter(static_cast<QWidget *>(obj));
}
...

Отсюда вы сможете установить правильные подсказки рендеринга в соответствии с вашими потребностями.

Один и тот же класс фильтра событий может быть установлен на многочисленных объектах, поэтому одну и ту же функциональность можно добавить очень быстро и без выделения подклассов для любого другого виджета.

1

Другие решения