gpt4 book ai didi

c++ - 为 QPushButton 启用抗锯齿

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:40 25 4
gpt4 key购买 nike

我有一个 QPushButton,我通过样式表使用边框图像对其进行样式设置。但是,图像质量很差,因为图像不是使用抗锯齿绘制的。

有没有什么方法可以简单地启用抗锯齿,而无需子类化 QPushButton 并给它一个新的画家?我真的不想这样做,因为我广泛使用样式表并且必须创建一堆 QProperties 来模拟现有的伪状态功能。

最佳答案

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

根据Qt Docs for QPainter :

... When the paintdevice is a widget, QPainter can only be used inside a paintEvent() function or in a function called by 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));
}
...

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

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

关于c++ - 为 QPushButton 启用抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26783855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com