是否可以设置全局 QPainter 默认渲染提示?

Is it possible to set global QPainter default render hints?

创建 QPainter 时,它有一些默认渲染提示。一些小部件在绘制自己时会覆盖它们。是否可以覆盖这些默认值 禁用整个应用程序的每个小部件覆盖?

我想按如下方式覆盖默认值,并使所有小部件 类 遵循这些:

painter->setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing, false);
painter->setRenderHints(QPainter::TextAntialiasing , true);

可能吗?

更新:

简短回答:不更改 Qt 源代码是不可能的。

您可以将 QPainter 子类化为:

class MyQPainter: public QWidget
{
    Q_OBJECT;
    public:
        MyQPainter(QWidget *parent = 0);
        QPainter painter;
}

和:

MyQPainter::MyQPainter(QWidget *parent)
    : QWidget(parent)
{
    painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing, false);
    painter.setRenderHints(QPainter::TextAntialiasing , true);
}

现在,您可以声明MyQPainter *pPainter = new MyQPainter();

不幸的是,Qt 没有实现任何 public 方法。

有两个问题:

  1. 默认渲染提示 - QPainter::TextAntialiasingQPainter::begin(QPaintDevice*) 中设置。根据你的问题,这正是你想要的,but

  2. 小部件可以自由覆盖这些默认值。他们中的许多人都这样做。如果不插入会拦截并忽略它们的垫片绘制引擎(或类似引擎),就无法禁用它。

更改它的最简单方法是修改 QPainter::setRenderHintQPainter::setRenderHints 以禁用某些小部件类型的覆盖,然后重新构建 Qt。在任何专业环境中,无论如何您都会使用自己构建的 Qt,因此这应该不是问题。

可能有一种方法可以使用 Qt 的私有头文件来挂钩它,最有可能是通过提供垫片绘制引擎并将其换出到后备存储中,而无需修改 Qt 本身,但这会很混乱而且不值得.