【问题标题】:Enable antialiasing for QPushButton为 QPushButton 启用抗锯齿
【发布时间】:2014-11-06 16:01:28
【问题描述】:

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

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

【问题讨论】:

    标签: c++ qt event-handling antialiasing


    【解决方案1】:

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

    根据QtDocs 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));
    } 
    ...
    

    从这里您应该能够将正确的渲染提示设置为您需要的。

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

    【讨论】:

      猜你喜欢
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      相关资源
      最近更新 更多