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

时间:2015-08-31 13:05:26

标签: c++ qt rendering qt5 qpainter

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

我想按如下方式覆盖默认值,并使所有窗口小部件类遵循以下步骤:

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

有可能吗?

更新:

简短回答:如果不更改Qt源代码,则无法做到。

2 个答案:

答案 0 :(得分:1)

不幸的是,Qt并未实施任何公开的方式。

有两个问题:

  1. 默认渲染提示 - QPainter::TextAntialiasingQPainter::begin(QPaintDevice*)中设置。根据您的问题

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

  4. 更改它的最简单方法是修改QPainter::setRenderHintQPainter::setRenderHints以禁用某些窗口小部件类型的覆盖,并重建Qt。在任何专业设置中,无论如何你都会使用你自己的Qt版本,所以这不应该是一个问题。

    可能有一种方法可以使用Qt的私有头连接它,最有可能的方法是提供一个垫片绘制引擎并将其交换到后备存储,而不需要修改Qt本身,但它会很麻烦而且不值得。 / p>

答案 1 :(得分:-2)

您可以使用以下内容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();