Qt中的QStringLiteral宏

2023-11-15

使用 QStringLiteral 宏可以在编译期把代码里的常量字符串 str 直接构造为 QString 对象,于是运行时就不再需要额外的构造开销了。

如果编译器支持,则 QStringLiteral 宏在编译时从 str 生成一个 QString 的数据。在这种情况下从 QStringLiteral 创建一个 QString 是自由的,生成的字符串数据存储在编译的目标文件的只读段中。

对于不支持创建编译时字符串的编译器,QStringLiteral 的使用效果将与使用 QString::fromUtf8() 一样。

例如:

if (node.hasAttribute("http-contents-length")) //...

这将创建一个临时 QString 作为 hasAttribute 函数的参数传递。这可能是非常耗费资源的,因为它涉及内存分配以及将数据复制和转换为 QString 的内部编码数据。

这可以通过如下代码来避免:

if (node.hasAttribute(QStringLiteral("http-contents-length"))) //...

然后,QString 的内部数据将在编译时生成,并且在运行时将不会发生任何的转换或分配。

使用 QStringLiteral 而不是双引号的 ascii 文字可以大大加快从编译时已知的数据中创建 QString 的速度。

如果编译器启用了 C++11,则字符串 str 实际上可以包含 unicode 数据。

注意:在有一些情况下 QLatin1String 是比 QStringLiteral 更有效的:如果它被传递给一个有直接接受 QLatin1String 而不转换成 QString 类型参数的重载的函数时。 例如,QString::operator == 就是这种情况

if (attribute.name() == QLatin1String("http-contents-length")) //...

串联字符串文字不能与 QStringLiteral 一起使用。

QString s = QStringLiteral("a" "b");

QStringLiteral 不能用来初始化 QString 的列表或数组。

QString a[] = { QStringLiteral("a"), QStringLiteral("b") };

转自:https://www.jianshu.com/p/188f6775c7f4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中的QStringLiteral宏 的相关文章

  • 使用样式表时的 QTabWidget tabPosition

    我目前正在使用样式表来设计应用程序的主题 这是我用于 QTabWidget 的样式表 QTabBar et QTabWidget QTabBar tab background qlineargradient spread pad x1 0
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • 如何从 ffmpeg 中打开的文件获取流信息?

    我正在尝试使用 ffmpeg 读取视频文件 我有与其旧版本相对应的工作代码 并开始尝试升级到最新的构建版本 将所有这些已弃用的函数替换为其实际的类似函数 但是我遇到了问题 似乎没有检索到任何流 并且视频负载停止在轨道中 这是我正在使用的代码
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 如何改善 Qt5 程序的启动时间?

    我最近切换到 Qt5 我注意到与 Qt4 相比 初始化 QApplication 花费的时间明显更长 大约几分钟 仔细一看 程序似乎把时间花在了这里 Qt5Guid dll QGlobalStatic
  • Qt ObjectName() 必须是唯一的吗?

    如标题所示的简单问题 如果我打电话setObjectName 在一个对象上 它是否必须是唯一的 或者只是因为约定而推荐 我已经子类化了QLabel 并希望自动为创建的对象命名 如果这是一个坏主意 我会找到一些设置随机唯一名称的方法 我实际上
  • 在 Qt 中用像素图画笔画一条线?

    一段时间以来 我正在使用 Qt C 开发一个简单的绘图和绘画应用程序 目前我正在使用 QPainter drawLine 进行绘制 并且工作正常 我想做的是用像素图画笔绘图 这是我可以做到的 我可以使用 QPainterPath 和 QPa
  • QListWidget 拖放项目从 Symbian 列表中消失

    我在实现带有可通过拖放重新排序的自定义项的 QListWidget 时遇到问题 问题是当我在某个项目上快速双击 非常短的拖放 时 该项目有时会从 QListWidget 中消失 这是我的小部件的构造函数 ListPopisiDragDrop
  • Qt - 等待 Qprocess 完成

    我正在使用 CMDQProcess但我有一个问题 My code QProcess process process start cmd exe process write del f b txt n r process waitForFin
  • 关于在 Qt 中使用未记录的类

    使用无证文件是否安全QObjectUserData类和QObject setUserData in Qt 相反 你可以看看使用QObject setProperty http doc qt io qt 5 qobject html setP
  • 使用 QSet 作为 Qt 地图容器中的键

    我需要一个映射 其中键是唯一的 并且每个键都是一组或自定义 POD 结构 其中包含 3 个数据项 这些值只是指向对象实例的指针 从阅读Qt 的 QMap 与 QHash 的文档 http qt project org doc qt 4 8
  • QGraphicsScene没有删除QWidget的功能

    QGraphicsScene 有一个addWidget QWidget 有函数 但是没有对应的removeWidget QWidget 它只有removeItem QGraphicsItem 如何删除 QWidget 这是一个基本示例 看看
  • 另一个宏中的 Q_PROPERTY 宏

    如何放置Q PROPERTY另一个宏里面 辅助宏 define SimpleAllinOne member type public void Set member type arg member m member arg member ty
  • QPainter 性能高帧率

    我试图在 QPainter 中以 60fps 的速度显示视频 在 OpenGLwidget 中 我遇到一个问题 有时绘图花费的时间太长 并且在使用 QPainter 时发生下一个重绘事件 这会生成警告和随机崩溃 有几个问题 是否有一种 Qt
  • 如何在qt中进行异步文件io?

    我想知道如何在qt中实现异步文件io 这在普通的 qt 中是否可以实现 或者有人需要使用另一个库 例如 libuv 来实现这样的事情 我正在查看 QDataStream 但即使它是一个 流 它也不是非阻塞的 我想一种解决方案是制作一个在内部
  • 如何在 QT 中绘制点?

    我正在用 QT 用 C 编写一个应用程序 其中有 n 个点并计算它的凸包 然而 一旦计算出来 我不知道如何绘制点并绘制船体的边界 制作菜单按钮等很简单 但我不确定我是否知道执行此操作的工具 你怎么做到这一点 图形视图 addEllipse
  • 打开和关闭附加窗口 (QML)

    目前我有一个通过以下方式打开的窗口 property variant win Button id testButton MouseArea onClicked var component Qt createComponent test qm
  • Qt 人工鼠标点击无法正常工作

    小玩具应用程序可以在这里找到 http gist github com 517445 http gist github com 517445 我正在尝试将人工鼠标事件发送到小部件 我使用QApplication sendEvent为此 接下
  • 如何在Qt 5中的paintEvent上使用mouseMoveEvent?

    我是 Qt 和 c 的新手 所以我遇到了一些困难 我正在尝试创建一个小部件 它可以获取 mouseMoveEvent 位置并在鼠标位置的像素图上绘制椭圆 下面你可以看到代码 include myimage h include
  • 如何在针对 Windows XP 的情况下使用 VS2012 构建 Qt 4/5?

    我正在尝试使用 Visual Studio 2012 构建 Qt 4 8 5 Qt 5 2 1 针对 Windows XP SDK v7 1a 使用 VS2102 编译时 源代码与 SDK v7 1a 存在各种不兼容性 因此无法开箱即用 这

随机推荐

  • 51单片机学习之-中断

    中断 在51单片机中共5个中断源 分别为 总的来说分为内部中断与外部中断 先说内部中断 也就是上图的两种定时器中断 T0 T1 它们的使用与4个寄存器有关 现在来介绍四种寄存器 中断允许寄存器 中断优先级寄存器 定时器工作方式寄存器 定时器
  • 151. 反转字符串中的单词

    1 题目地址 151 反转字符串中的单词 2 题目描述 给你一个字符串 s 请你反转字符串中 单词 的顺序 单词 是由非空格字符组成的字符串 s 中使用至少一个空格将字符串中的 单词 分隔开 返回 单词 顺序颠倒且 单词 之间用单个空格连接
  • vba与python的优缺点_对比VBA学Python操作Excel

    关于先学VBA还是先Python 或者作为办公族选什么 这些问题 我已经写了专题 就不再啰嗦 建议先阅读 讨论 学习VBA还是Python 但是大家一直还是被Python吸引 所以小编就说一期Python操作Excel吧 大部分教编程的 对
  • tensorflow 混合精度训练相关报错

    如题 在混合精度开发的时候遇到的报错 先列环境 V100服务器 ubuntu16 04 tensorflow 1 14 0 cuda10 0 python3 6 报错一 ValueError opt must be an instance
  • MySQL进阶语句

    目录 常用查询 order by按关键字排序 升序排序 降序排序 结合where进行条件过滤再排序 多字段排序 and or判断 and or 且与或的使用 嵌套 多条件使用 distinct 查询不重复记录 GROUP BY对结果进行分组
  • 经济,jiaxi

  • moviepy音视频开发:音频合成类CompositeAudioClip介绍

    前往老猿Python博文目录 CompositeAudioClip是AudioClip的直接子类 用于将几个音频剪辑合成为一个音频剪辑 CompositeAudioClip类只有一个构造方法 在构造方法内定义了一个内嵌函数make fram
  • 蓝屏错误代码分析和解决方法

    文字代码 可能的原因 可尝试的解决方法 0x00000001 APC INDEX MISMATCH 驱动出现问题 或安装了错误 不兼容的驱动 更新 重新安装相应设备官网的驱动 0x00000005 INVALID PROCESS ATTAC
  • VSCode的Pettier插件原理和设置

    最近写了一个 Prettier 插件 可以达到这样的效果 同事每次保存代码的时候 import 语句的顺序都会随机变 但是他去 prettier 配置文件里还啥也发现不了 于是就会一脸懵逼 那么这个同事发现了会打你的 prettier 插件
  • 在生信中利用Chat GPT/GPT4

    论文链接Ten Quick Tips for Harnessing the Power of ChatGPT GPT 4 in Computational Biology Papers With Code 之前在paper with cod
  • JAVA-JDK8的特性之Lambda表达式

    1 Lambda表达式 2 函数式接口 3 方法引用 4 Stream流 5 日期时间类 1 Lambda表达式 1 1 Lambda的由来 package demo01 public class Test01 public static
  • 从mpeg ts文件中提取I帧(1):将ts包拼装为section或pes包

    写在前面的话 不觉中已经在数码工作了十年有余 十年的青春 十年的汗水 如今即将离开 个中滋味难以言表 以后可能不会在广电行业工作了 就用这个小程序 为自己十年的广电工作画上一个句号吧 依旧是 版权没有 盗版不纠 欢迎转载 本程序的功能 提取
  • Linux中Crontab(定时任务)命令详解及使用教程

    Crontab介绍 Linux crontab是用来crontab命令常见于Unix和类Unix的操作系统之中 用于设置周期性被执行的指令 该命令从标准输入设备读取指令 并将其存放于 crontab 文件中 以供之后读取和执行 该词来源于希
  • altium designer 画箭头

    一直在网上找如何在altium designer 中画箭头 没有结果 实然想到在AD的元件库中有不少元件是有箭头的 如果打开库文件 不就能看其属性了吗 于是选择Miscellaneous Devices IntLib打开做 试验 在打开时会
  • 萌新养成

    金三银四跳槽季 这个时候需要做好准备的可不仅仅只有在职或者离职的萝卜 尚未毕业的萌新也需要提早做准备了 毕竟把自己修炼成一个优秀的萝卜也不是一件容易的事 所以 放下你找对象 刷副本 世界游的想法 加入我们为你量身定制的人才培养计划 加入营长
  • lambda函数详解

    lambda函数的使用 捕获列表 常量性区别1 常量性区别2 lambda函数的实现 注意事项 lambda函数的使用 lambda函数的完整形式如下 capture parameters mutable gt return type st
  • K近邻估计

    Kn 近邻估计 KN近邻估计基本思想 预先确定n的某个函数Kn 然后再x点周围选择一个区域 调整区域体积大小 直至Kn个样本落入区域中 这些样本被称为点x的Kn个最近邻 如果x点附近的密度比较高 则V的体积自然就相对较小 从而可以提升分辨力
  • Maven下载与安装

    Maven下载 Maven官网 https maven apache org 进入官网 点击Download 可以看见4个文件 apache maven 3 8 7 bin tar gz是Linux版安装的 apache maven 3 8
  • 点云配准

    目录 一 点云配准概念 二 点云配准分类 1 无辅助的自动拼接 2 人工辅助标志点 三 配准常见流程 1 粗配准 2 精配准 1 奇异值分解求解 2 四元素求解旋转矩阵 参考文献 一 点云配准概念 由于三维扫描测量设备受测量方式的限制和被测
  • Qt中的QStringLiteral宏

    使用 QStringLiteral 宏可以在编译期把代码里的常量字符串 str 直接构造为 QString 对象 于是运行时就不再需要额外的构造开销了 如果编译器支持 则 QStringLiteral 宏在编译时从 str 生成一个 QSt