互换使用 std::string 和 QString

2024-01-30

我在我正在开发的图形和 GUI 组件软件系统中广泛使用 Qt。然而,对于大多数内部算法和数据处理来说,Qt 发挥的作用较小。

我经常会遇到从 std::string 转换为 QString 的需要,反之亦然。我的倾向是尽可能使用 std::string 并使用 QStringonly当我需要将字符串传递给 Qt 类(例如那些使用文件系统的类)时。

当我今天早上编程时,我突然意识到,在我的代码中同时使用 std::string 和 QString 可能是一个糟糕的设计。我应该完全切换到 QString 吗?还有其他人遇到过这种设计选择吗?

Qt 提供了许多与 STL 相同的功能,但我仍然犹豫是否要完全切换,因为 Qt 的标准化和稳定性较差。


是的,我以前也遇到过这种情况。我开发的程序自始至终都使用 Qt,但我必须将其连接到预期的库std::string。的好处是QString最大的问题是它明确使用 Unicode,而 C++ 标准库对编码不做任何保证。

解决方案是在该库的边界处进行转换

QString toQString(std::string const &s)
{
    return QString::fromUtf8(s.c_str());
}

std::string fromQString(QString const &s)
{
    return std::string(s.toUtf8().data());
}

自从图书馆产生std::string包含 UTF-8。

你似乎想要的是完全相反的:使用std::string整个过程并在 Qt 边界处进行转换。看起来完全没问题;比平时使用需要更多的工作QString,但是当你需要非-的时候你就必须付出努力QString- 无论如何接受库,并且您的非 GUI 组件不依赖于 Qt(万岁!)。

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

互换使用 std::string 和 QString 的相关文章

随机推荐

  • 为什么主容器上有垂直滚动条?

    我在这里很困惑 自从body为 100 宽度 高度 并且main container也是100 宽 高 为什么会有垂直滚动 我创建了一个 jsFiddle 来解释这种情况 http jsfiddle net dcnnvgs1 1 http
  • 重载的方法组参数会混淆重载解析吗?

    以下调用重载Enumerable Select http msdn microsoft com en us library system linq enumerable select aspx method var itemOnlyOneT
  • EntityFramework 不保存 null 和 false 值

    我正在尝试通过附加断开连接的实体来使用 EntityFramework 6 更新记录 我想将单个布尔字段更新为false但它不起作用 我使用了 sql server profiler 并且在上下文中调用 SaveChanges 时 EF 不
  • stanford corenlp python 与 pexpect 错误

    我正在尝试从 stanford corenlp python 包运行 corenlp py 当我运行它时 我收到此错误 Traceback most recent call last File corenlp py line 592 in
  • List集合中的Select方法

    我有一个 asp net 应用程序 现在我正在使用数据集进行数据操作 我最近开始将此数据集转换为列表集合 但是 在某些地方它不起作用 一是在我的旧版本中我正在使用datarow drow dataset datatable select s
  • Ray on slurm - 初始化问题

    我写这篇文章是因为自从我使用 slurm 以来 我一直无法正确使用 ray 每当我使用命令时 ray init trainer A3CTrainer env my env 我已经在tune上注册了我的env 程序崩溃并显示以下消息 core
  • 将facet_wrap分割成多页PDF

    我已经四处寻找解决方案 但似乎大多数处理将单独生成的图合并为 PDF 格式 而不是将使用分面生成的图分离到 PDF 的单独页面上 示例数据 https drive google com file d 0B8KPGzjWWaw7V0s3UG0
  • mysql - 如何连接字符串并将字符串转换为日期?

    请看一下我的存储过程代码 CREATE DEFINER ninjaboy PROCEDURE getMonthlyTotalScore IN ninjaId int IN month int IN year int BEGIN DECLAR
  • Python - 使用defaultdict制作自定义对象的字典

    我创建了以下课程 包 网站和评论都是字符串 distroDict 是一个 string list 字典 class TableEntry object def init self package website distroDict com
  • 在加载和 Ajax 加载的内容上运行 JS 代码

    请看这个 HTML 代码 div class grid h2 First h2 p Second p div div class grid h2 First h2 p Second p div 我可以使用以下代码更改页面加载时元素的顺序 g
  • C++ lambda 函数的默认调用约定是什么?

    下面的代码是用VC 2012编译的 void f1 void stdcall void f2 void cdecl void cdecl h1 void stdcall h2 int main f1 h1 error C2664 f2 h2
  • Azure - 一个“块 blob”是否被视为一个文件?

    问题背景 这可能是一个简单的问题 但我找不到答案 我刚刚开始使用 Azure 存储 用于存储图像 想知道一个 blob 是否最多可容纳一个文件 这是我的容器 名为fmfcpics 在容器内我有一个名为的块 blobmyBlob其中我有一张图
  • CA2227 的解决方案还是更好的方法?

    我仅使用代码分析来清理 组织并确保针对特定警告的所有实例全局执行这些更改 我已经进入决赛了 比赛是 CA2227 CA2227 集合属性应为只读 将 更改为 通过删除属性设置器来只读 请注意 这是用于 EDI 文档的映射 这些类代表 EDI
  • 降落伞分段错误 - pygame 到 py2exe

    我正在使用 GUI2Exe 将我的 python pygame 游戏编译为 exe 我的字体模块有问题 使用 python 2 7 和 GUI2Exe 中的 py2exe 选项 我已经将 python pygame 和 py2exe 更新为
  • Chrome 的 colspan 和 border 错误?

    在下面的示例中 右侧单元格的顶部有一个边框 它只出现在 Chrome 中 是 Chrome 的 bug 吗 HTML CSS html body height 100 table border collapse collapse width
  • 在 Flutter 中重新发送 OTP 代码 Firebase 电话身份验证

    这可能是重复的 但任何其他线程都没有为我提供正确的答案 有关于 android 原生语言的答案 但没有关于 Flutter dart 的答案 我有以下有效方法 但如果我想将 OTP 重新发送到用户电话号码 我该怎么做 只需一个简单的示例代码
  • java jre 7u45 破坏了 classloader.getResources()?

    我有代码迭代 classLoader getResources META INF MANIFEST MF 的结果以返回类路径上的 jar 列表 从 1 6 0 18 一直到 1 7 0 40 这都工作得很好 现在 1 7 0 45 通过显示
  • EF Core Fluent API 配置防止 TPC 继承

    我有相互继承的模型 但我正在努力让流畅的 api 配置按照我想要的方式运行 假设我有一个基类 它定义了一些核心属性 public class Entity public int Id get set public string Title
  • 如何设置 Azure Devops 来构建 Devexpress XAF-XPO 项目?

    我想在 Azure Devops 中为 XAP 移动应用程序设置持续集成和部署 为了获得 CI CD 我需要设置 Azure Pipeline 来安装正确的包 文档中有一些信息托管您自己的 NuGet 源 https learn micro
  • 互换使用 std::string 和 QString

    我在我正在开发的图形和 GUI 组件软件系统中广泛使用 Qt 然而 对于大多数内部算法和数据处理来说 Qt 发挥的作用较小 我经常会遇到从 std string 转换为 QString 的需要 反之亦然 我的倾向是尽可能使用 std str