创建QPainter
时,它有一些默认的渲染提示。一些小部件在绘制自己时会覆盖它们。是否可以覆盖这些默认值和禁用整个应用程序的每个窗口小部件覆盖?
我想按如下方式覆盖默认值,并使所有窗口小部件类遵循以下步骤:
painter->setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing, false);
painter->setRenderHints(QPainter::TextAntialiasing , true);
有可能吗?
更新:
简短回答:如果不更改Qt源代码,则无法做到。
答案 0 :(得分:1)
不幸的是,Qt并未实施任何公开的方式。
有两个问题:
默认渲染提示 - QPainter::TextAntialiasing
在QPainter::begin(QPaintDevice*)
中设置。根据您的问题但
小部件可以自由覆盖这些默认值。他们中的许多人都这样做。如果没有插入可以拦截它们并忽略它们的垫片绘制引擎(或类似引擎),就无法禁用它。
更改它的最简单方法是修改QPainter::setRenderHint
和QPainter::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();