首页 > 其他分享 >Qt 文本抗锯齿

Qt 文本抗锯齿

时间:2024-09-21 10:36:03浏览次数:1  
标签:抗锯齿 ft Qt image QFont setRenderHint QPainter 文本 painter

1. 通常情况下, 在 paintEvent 中绘制文本时, 不管是否设置抗锯齿选项, 都不会有明显的锯齿, 如下代码所示, Antialiasing/TextAntialiasing 对最终的效果没有显著影响.

    QFont ft = painter.font();
    ft.setFamily("PingFang SC");
    ft.setPixelSize(13);
    ft.setWeight(QFont::Medium);
    painter.setFont(ft);
    painter.setRenderHint(QPainter::Antialiasing, false);
    painter.setRenderHint(QPainter::TextAntialiasing, false);
    // painter.setRenderHint(QPainter::Antialiasing, true);
    // painter.setRenderHint(QPainter::TextAntialiasing, true);
    painter.drawText(0, 0, 200, 50, Qt::AlignCenter, "Test1234567890");

                

 2. 某些情况下, 我们需要将数据预先绘制到缓存图片上(如多线程构建缓存图片), 再绘制到界面上时, 上述代码就有问题了

    if (image.isNull())
    {
        image = QImage(300, 300, QImage::Format_RGBA8888);
        image.fill(Qt::transparent);
        QPainter painter(&image);
        QFont ft = painter.font();
        ft.setFamily("PingFang SC");
        ft.setPixelSize(13);
        ft.setWeight(QFont::Medium);
        painter.setFont(ft);
        // painter.setRenderHint(QPainter::Antialiasing, false);
        // painter.setRenderHint(QPainter::TextAntialiasing, false);
        painter.setRenderHint(QPainter::Antialiasing, true);
        painter.setRenderHint(QPainter::TextAntialiasing, true);
        painter.drawText(0, 0, 200, 50, Qt::AlignCenter, "Test1234567890");
    }
    painter.drawImage(0, 0, image);

            

 上述 image 是一个 QImage 对象, 我们启用 Antialiasing/TextAntialiasing, 可以看到文字还是出现了明显的锯齿.

  此时我们需要开启字体的抗锯齿选项, 才能避免出现这种现象:

    if (image.isNull())
    {
        image = QImage(300, 300, QImage::Format_RGBA8888);
        image.fill(Qt::transparent);
        QPainter painter(&image);
        QFont ft = painter.font();
        ft.setFamily("PingFang SC");
        ft.setPixelSize(13);
        ft.setWeight(QFont::Medium);
        ft.setStyleHint(QFont::AnyStyle, QFont::PreferAntialias);
        // ft.setStyleStrategy(QFont::PreferAntialias);
        painter.setFont(ft);
        painter.drawText(0, 0, 200, 50, Qt::AlignCenter, "Test1234567890");
    }
    painter.drawImage(0, 0, image);

              

通过设置 ft.setStyleHint(QFont::AnyStyle, QFont::PreferAntialias); 或 ft.setStyleStrategy(QFont::PreferAntialias); 之后, 可以看到, 文本锯齿消失了.

 

标签:抗锯齿,ft,Qt,image,QFont,setRenderHint,QPainter,文本,painter
From: https://www.cnblogs.com/diysoul/p/18423598

相关文章

  • Qt基础操作槽函数
    在"dialog.cpp"文件的构造函数中添加如下代码:```cppinputBtn=newQPushButton;inputBtn->setText(tr("标准输入对话框实例"));添加布局管理:mainLayout->addWidget(inputBtn,3,0);最后添加事件关联://创建控件的对象//布局设计connect(inputBtn,SIGNAL(clicke......
  • 【Python-GUI图形化界面-PyQt5模块(2)】——QApplication核心模块
     本文旨在带大家学习Python中的一种GUI图形化界面模块——PyQt5模块,将为大家详细了解PyQt5模块中函数的参数和使用:一、PyQt5简介PyQt是Qt框架的Python语言实现,由RiverbankComputing开发,是最强大的GUI库之一。官方网站:www.riverbankcomputing.com、 本文比较倾向于教会......
  • Qt拖拽事件详解,拖放数据传递
    1.QT拖拽事件分为两类。(1)电脑上的文件拖入程序,在程序上放下文件Drop;例如将视频拖入程序进行播放,将图片突入程序进行展示;(2)程序中界面内部拖放,例如将组织树中的监控点拖入播放窗口进行播放;将一个表格中的人员拖入另外一个表格等;将QTreeview中的item拖动位置,移到不同的组织下;或者将......
  • 多语言长文本 AI 关键字提取 API 数据接口
    多语言长文本AI关键字提取API数据接口AI/文本专有模型极速提取多语言长文本/实时语料库。1.产品功能支持长文本关键词提取;多语言关键词识别;基于AI模型,提取精准关键词;全接口支持HTTPS(TLSv1.0/v1.1/v1.2/v1.3);全面兼容AppleATS;全国多节点CDN部署;......
  • 【qt】一个WPS项目了解qt界面设计的基本套路
    项目功能演示:放心食用!最后有完整代码.超级详细,期待您的一个点赞❥(^_-)一览全局:WPS项目目录一.创建项目二.导入资源三.ui设计四.字号选择框初始化五.滚动条初始化六.添加自定义文本类七.初始化action状态八.新建文档九.打开文件十.保存与另存为十一.打印/打......
  • 如何在 Chrome 浏览器上使用「朗读文本」功能(本文主要适用于读英语)
    1启用功能在地址栏中输入Chrome://flags输入「ReadAloud」在下拉菜单中选择开启重启Chrome浏览器2 让Chrome朗读你需要的文本:在英文网页上选中你需要的文本(如是中文网页则提示:此页面不支持朗读模式,或者只读取页面上的英文单词,应该是要下载语言包)然后,我的是:点工......
  • PyQGIS开发 2 Qt开发入门
    PyQGISQt开发入门1使用QtDesignerQGIS在安装后已经配套了QtDesigner,可以在开始菜单->QGIS->QtDesignerforQGIS点击运行程序,或者在QGIS安装目录/bin/qgis-designer.bat(或qgis-ltr-designer.bat)点击运行。选择MainWindow模板创建,点击下方的创建后,将创建如......
  • QT Widgets模块源码解析与应用
    QTWidgets模块源码解析与应用使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视......
  • QT QML模块的编程挑战与解决方案
    QTQML模块的编程挑战与解决方案使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化......
  • QT绘图模块与数据库的结合
    QT绘图模块与数据库的结合使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频免......