为QPushButton启用抗锯齿
Enable antialiasing for QPushButton
本文关键字:启用 QPushButton 更新时间:2023-10-16
我有一个QPushButton
,我正在通过样式表使用边框图像进行样式设置。然而,图像质量很差,因为图像不是使用抗锯齿绘制的。
有没有什么方法可以在不将QPushButton
子类化并赋予它一个新的画家的情况下实现抗锯齿?我真的不想这么做,因为我正在广泛使用样式表,并且必须创建一堆QProperty来模拟现有的伪状态功能。
通常可以使用setRenderHints方法在QPainter对象上设置抗锯齿标志。这通常是通过对小部件进行子类化并覆盖paintEvent来完成的。
根据QPainter的Qt文档:
当paintdevice是一个小部件时,QPainter只能在paintEvent()函数内部或在paintEvent()调用的函数中使用。。。
如果没有子类化,您将被限制为使用事件过滤器拦截paintEvent并自己设置标志。
您需要创建一个类来覆盖对象的事件处理程序。此类将使用QObject::installEventFilter
进行安装。这个类需要过滤事件来处理您关心的特定事件(QPaintEvent)。然后,它将需要创建一个QPainter对象,该对象将原始对象(使用第二个构造函数)作为其设备,如qtforum文章中所示。这是因为QWidget继承了QPaintDevice。
...
myView::handlePaintEvent(QObject *obj, QEvent *eve)
{
QPainter painter(static_cast<QWidget *>(obj));
}
...
从这里,你应该能够设置正确的渲染提示,以满足你的需要。
这个相同的事件过滤器类可以安装在许多对象上,因此可以非常快速地添加相同的功能,而无需对任何其他小部件进行子类化。
相关文章:
- 编译时未启用intel oneApi CUDA支持
- OpenGL在启用深度测试时不会丢弃我的碎片
- Visual C++GC接口如何启用它以及要包含哪个库
- 如何在自定义类中启用'auto loops'?
- 根据某个函数是否存在启用模板
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- 启用从"vector<const T>&"到"const vector&"的隐式转换<T>
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- 在 Eclipse 上启用 C++17 以使用 'std::byte'
- 当 noexcept 函数尝试在 gcc 或 clang 中调用非 noexcept 函数时启用警告
- 如何为一段代码启用 -permissive
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 在 GCC 中启用"differing levels of indirection"警告/错误
- 使用 Doxygen 记录枚举类值,而不启用EXTRACT_ALL
- '_HAS_CXX17'宏是否可用于自定义项目标头以启用C++17 语言集功能?
- 如何启用转换模板参数 T 以常量 T?
- 在使用 gSoap 链接多个 SOAP 服务时启用保持活动状态
- 如何启用标准::实验::atomic_shared_pointer
- 如何使QLineEdit编辑在文本来自QPushButton时启用
- 为QPushButton启用抗锯齿