我有一个QPushButton,正在通过样式表使用边框图像进行样式设置。但是,图像质量很差,因为未使用抗锯齿功能绘制图像。

是否有任何方法可以简单地启用抗锯齿功能而无需将QPushButton子类化并为其提供新的绘画工具?我并不是真的想要这样做,因为我正在广泛使用样式表,因此必须创建一堆QProperty来模拟现有的伪状态功能。

最佳答案

通常,您可以使用Anti-aliasing flag方法在QPainter对象上设置setRenderHints。通常,这是通过对小部件进行子类化并覆盖paintEvent来完成的。

根据Qt Docs for QPainter:



如果没有子类,您将只能使用Event Filter拦截paintEvent并自行设置标志。

您将需要创建一个类,该类将覆盖对象的事件处理程序。此类将使用 QObject::installEventFilter 安装。此类将需要过滤事件以处理您关心的特定事件(QPaintEvent)。然后,它将需要创建一个QPainter对象,该对象将原始对象(使用第二个constructor)作为其设备,如qtforum post所示。之所以可行,是因为QWidget继承自QPaintDevice。

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

从这里,您应该能够根据自己的需要设置适当的“渲染提示”。

可以将同一事件过滤器类安装在多个对象上,因此可以非常快速地添加相同的功能,而无需子类化任何其他小部件。

07-24 09:27