我有一个QPushButton
,我通过样式表为边框图像设计样式。但是,图像质量很差,因为图像不是使用抗锯齿绘制的。
有没有办法在没有子类化QPushButton
并给它一个新画家的情况下启用抗锯齿?我并不是真的想这样做,因为我广泛使用样式表,并且必须创建一堆QProperties来模拟现有的伪状态功能。
答案 0 :(得分:1)
您通常可以使用Anti-aliasing flag方法在QPainter对象上设置setRenderHints。这通常通过子类化小部件并覆盖paintEvent来完成。
根据Qt Docs for QPainter:
...当paintdevice是一个小部件时,QPainter只能在paintEvent()函数内或paintEvent()调用的函数中使用...
如果没有子类化,您将仅限于使用Event Filter拦截paintEvent并自行设置标志。
您需要创建一个覆盖对象的事件处理程序的类。该课程将使用QObject::installEventFilter
安装。此类需要过滤事件以处理您关心的特定事件(QPaintEvent)。然后,它需要创建一个QPainter对象,该对象接收原始对象(使用第二个constructor)作为其设备,如此qtforum post所示。这是有效的,因为QWidget继承自QPaintDevice。
...
myView::handlePaintEvent(QObject *obj, QEvent *eve)
{
QPainter painter(static_cast<QWidget *>(obj));
}
...
从这里开始,您应该可以将正确的渲染提示设置为您需要的颜色。
这个相同的事件过滤器类可以安装在众多对象上,因此可以非常快速地添加相同的功能,而无需继承其他任何小部件。