是否可以设置全局 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 方法。
有两个问题:
默认渲染提示 - QPainter::TextAntialiasing
在 QPainter::begin(QPaintDevice*)
中设置。根据你的问题,这正是你想要的,but
小部件可以自由覆盖这些默认值。他们中的许多人都这样做。如果不插入会拦截并忽略它们的垫片绘制引擎(或类似引擎),就无法禁用它。
更改它的最简单方法是修改 QPainter::setRenderHint
和 QPainter::setRenderHints
以禁用某些小部件类型的覆盖,然后重新构建 Qt。在任何专业环境中,无论如何您都会使用自己构建的 Qt,因此这应该不是问题。
可能有一种方法可以使用 Qt 的私有头文件来挂钩它,最有可能是通过提供垫片绘制引擎并将其换出到后备存储中,而无需修改 Qt 本身,但这会很混乱而且不值得.
创建 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 方法。
有两个问题:
默认渲染提示 -
QPainter::TextAntialiasing
在QPainter::begin(QPaintDevice*)
中设置。根据你的问题,这正是你想要的,but小部件可以自由覆盖这些默认值。他们中的许多人都这样做。如果不插入会拦截并忽略它们的垫片绘制引擎(或类似引擎),就无法禁用它。
更改它的最简单方法是修改 QPainter::setRenderHint
和 QPainter::setRenderHints
以禁用某些小部件类型的覆盖,然后重新构建 Qt。在任何专业环境中,无论如何您都会使用自己构建的 Qt,因此这应该不是问题。
可能有一种方法可以使用 Qt 的私有头文件来挂钩它,最有可能是通过提供垫片绘制引擎并将其换出到后备存储中,而无需修改 Qt 本身,但这会很混乱而且不值得.