QString与char *转换

2023-11-05

QString转换成char *

方法一:转换为Latin1字符集的char*

QString qstr = "test";
char *ch = qstr.toLatin1().data();
qDebug()<<"ch = "<<ch;

-----------------
结果打印:
ch = test


但是当QString内含有中文时,转换为 char * 就是乱码

QString qstr = "你好!";     //我这里的!是英文的
char *ch = qstr.toLatin1().data();
qDebug()<<"ch = "<<ch;

-------------------
结果打印:
ch =  ??! 

解决方案一:
添加GBK编码支持:

#include <QTextCodec>
 
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));

然后把toLatin1()改成toLocal8Bit()这样就OK了
示例:

//注意记得添加头文件
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
QString qstr = "你好!";
char *ch = qstr.toLocal8Bit().data();
qDebug()<<"ch = "<<ch;

----------------
结果:
ch = 你好!

解决方案二:
先将 QString 转为标准库中的 string 类型,然后将 string 转为 char *。如下:

QString qstring = "你好!";
std::string str = qstring.toStdString();
const char *ch = str.c_str();
qDebug()<<"ch = "<<ch;

----------------
结果:
ch = 你好!

方法二:转换为Utf8字符集的char*

QString qstr = "hello!";
char *ch = qstr.toUtf8().data();
qDebug()<<"ch = "<<ch;

----------------
结果:
ch = hello!

注意:这个中文也是乱码。。。


方法三:转换为ascii字符集的char*

QString qstr = "hello!";
char *ch = qstr.toAscii().data();
qDebug()<<"ch = "<<ch;

----------------
结果:
ch = hello!

注意:这个中文也还是乱码。。。


char *转换成QString

方法一:用QString的构造函数进行转换

char *ch = "hello";
QString qstr = QString(QLatin1String(ch));
qDebug()<<"qstr = "<<qstr;

-------------------
结果:
qstr =  "hello" 

方法二:用QString的静态转换函数获取

如:fromUtf8()fromLocal8Bit()

char *ch = "hello!";
QString qstr = QString::fromUtf8(ch);
qDebug()<<qstr;

-------------
结果:
hello!

注意:fromLocal8Bit()支持中英文的转换~~

char *ch = "你好hello!";
QString qstr = QString::fromLocal8Bit(ch);
qDebug()<<qstr;

-------------
结果:
你好hello!

方法三:用QString的arg转换

char *ch = "hello";
QString qstr = QString("%1").arg(ch);
qDebug()<<"qstr = "<<qstr;

-------------------
结果:
qstr =  "hello" 

注意:利用arg可以将多种基本类型一起拼接成QString类型字符串,例如:

char *ch = "hello!";
int num1 = 10086;
double num2 = 3.1415;
QString qstr = QString("%1,%2,circle is %3").arg(ch).arg(num1).arg(num2);
qDebug()<<qstr;

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

QString与char *转换 的相关文章

  • 在 4K 屏幕上使用 Matplotlib 和 TKAgg 或 Qt5Agg 后端

    我在 Ubuntu 16 04 上使用 Matplotlib 2 0 和 Python 3 6 来创建数据图 电脑显示器的分辨率为 4k 分辨率为 3840x2160 绘图数字看起来非常小 字体也很小 我已经尝试过TKAgg and Qt5
  • 通过CMake实现Qt项目

    我正在尝试通过 Cmake 构建并运行非常简单且基本的 Qt 示例 删除 pro 文件 以下是Qt项目的代码 自动生成的Qt项目的目录结构为 Cmake my project name headers mainwindow h source
  • 如何通过 Qt 创建网络服务 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在Qt无框窗口中实现QSizeGrip?

    如何使用 Qt 无框窗口实现 QSizeGrip 代码会是什么样的 您只需在布局内窗口的一角添加 QSizeGrip 即可使其保持在该角落 QDialog dialog new QDialog 0 Qt FramelessWindowHin
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • 在 Qt 5 中嵌入 Python

    我想将 Python 解释器嵌入到 Qt 5 应用程序中 我在 Qt 5 中有一个工作应用程序 但是当我把 include
  • 如何在 QT 中绘制点?

    我正在用 QT 用 C 编写一个应用程序 其中有 n 个点并计算它的凸包 然而 一旦计算出来 我不知道如何绘制点并绘制船体的边界 制作菜单按钮等很简单 但我不确定我是否知道执行此操作的工具 你怎么做到这一点 图形视图 addEllipse
  • Qt5和QML:如何使用WebEngine Quick Nano浏览器自动输入用户名和密码

    我正在使用编写一个小应用程序Qt and QML使用 Qt 文档中的示例WebEngine Quick Nano 浏览器 https doc snapshots qt io qt5 5 9 qtwebengine webengine qui
  • QML:无法读取未定义的属性“xxx”

    ApplicationWindow id root property string rootName rootName visible true width 800 height 400 title qsTr WatchFace Maker
  • 如何在 Qt Creator 中编辑 QtWebKit 的右键上下文菜单?

    好吧 这是我的困境 我正在使用 Qt Creator 制作一个使用 Webkit 的简单应用程序 我认为 Qt Creator 会有一种简单的方法来使用信号和槽编辑器编辑右键单击上下文菜单 但事实证明这不是真的 我知道 webkit 有与上
  • 有没有办法向 QListView 添加部分?

    我正在使用 Qt5 2 和 C 来实现一个应用程序 需要显示一个列表 其中包含类似于下面的示例图像的部分 source ngo hung com http www ngo hung com files images contact list
  • 在 QtCreator 中使用 .pro 和 .pri 正确(树)显示 Qt 项目

    是否可以使用项目包含文件 pri 显示不止一个额外级别 例如如果 pro文件包括 pri文件包含两个 pri files pro pri pri pri 在 QtCreator 项目 中显示具有误导性 pro pri pri pri 它根本
  • 如何在 OS X 上的 Qt 应用程序中设置应用程序图标,足以进行分发?

    跟进这个答案 https stackoverflow com a 20918932 368896 to 这个问题 https stackoverflow com questions 20909341 what is the fastest
  • Qt 为什么使用 QString::number() 而不是 QLocale().toString()?

    我正在开发的应用程序将在许多国家推出 并且需要支持他们的语言 我一直在回顾我的代码并替换以下每个实例 QString number and QString toDouble with QLocale toString and QLocale
  • 完全彻底卸载QT Creator

    问题 如何从 Linux 机器上卸载 QT Creator 我的 Debian Jessie 机器上的安装已损坏 我尝试过重新安装 修复等 但没有成功 建议我完全卸载 获取最新版本并重新安装 问题是我不确定如何执行此操作 每次我尝试时 QT
  • 如何声明一个带有成员函数指针的函数

    我有一个类 其中的成员变量指向库对象 class myClassA private libraryClass libraryObject 该库类发出事件 以字符串为特征 并提供一种机制 允许客户端类指定在发出事件时应调用的成员函数 因此在m
  • 如何在针对 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 存在各种不兼容性 因此无法开箱即用 这
  • Qt中Q_PROPERTY的意义是什么?

    我无法理解 Q PROPERTY 的用法 Q PROPERTY 如何帮助程序具有防御性 它是干什么用的 我看过这个论坛 但确实无法应用 我已经理解了这个例子 但不明白它的用法 这是一个例子 我能从中得到什么 我知道阅读将赋予只读特权 wri
  • PyQt4 信号和槽

    我正在使用 PyQt4 编写我的第一个 Python 应用程序 我有一个 MainWindow 和一个 Dialog 类 它是 MainWindow 类的一部分 self loginDialog LoginDialog 我使用插槽和信号 这
  • 无法运行 Qt 应用程序:找不到版本“Qt_5”

    我运行 Ubuntu 16 04 LTS 我的问题是我无法运行可以编译的 Qt5 应用程序 这是我尝试运行它时得到的结果 home user Desktop sconfig dist Release GNU Linux SCongif us

随机推荐

  • css中背景颜色的代码,css背景代码是什么,css怎么控制背景颜色

    css背景代码是什么 css怎么控制背景颜色 内容导读 css背景代码主要就是设置background color 然后在后面选择我们喜欢的颜色就可以了 通常css背景代码用来控制div和特殊的文本 本文举了实例 也给出了代码 大家拿去用即
  • 【springboot系】springboot集成日志框架logback

    平常我们工作中常见的日志框架 有log4j logback log4j2 logback是由log4j的创始人设计的另外一个开源日志框架 logback相比之于log4j性能提升了不少 log4j2晚于logback 也是后起之秀 官方介绍
  • 【精·超详细】Java实现图片和Base64之间的相互转化(一看就会)

    目录 一 简介 二 maven依赖 三 工具类 四 测试 一 简介 工作中调用第三方接口的时候 比如 人脸识别 身份证识别 文字识别等等 有时是图片 有时是Base64的字符串 一般前端上传的都是图片 我们有时就需要进行相应的转换了 图片转
  • VsCode下的Remote-SSH插件的使用

    0 前言 众所周知 Vs Code是一个非常NB的编辑器 它可以通过安装不同的插件 满足几乎所有的开发需求 最近了解到微软之前推出过一个Remote SSH的插件 通过该插件可以在Vs Code上通过SSH连接Linux服务器进行终端操作或
  • Non-Rule Package常用表名

    1 GL相关 Journal Template和GL BU手动添加 GL ACCOUNT TBL GP GL GROUP GP GL GROUP DTL GP GL MAP GP GL MAP DTL 2 Pay Entity GP PYE
  • ubuntu 安装mysql,postgresql, mongodb

    安装mysql mysql教程 Ubuntu系统下MySQL开启远程连接 centos安装mysql 安装过程中需要要设置root密码 sudo apt get install python dev libpython dev libpq
  • FISCO BCOS区块链搭建笔记(No.1-节点搭建)

    说明 此文章针对的是centos版本的 其他版本可以参考官网 FISCO BCOS官网链接 点此跳转 1 搭建单群组FISCO BCOS联盟链 第一步 安装依赖 安装centos依赖 sudo yum install y openssl o
  • iOS 第三方登陆 —— 微信

    一 准备工作 1 到微信开放平台注册成开发者 获取appid 2 导入WeChatConnection framework 3 配置URL Schemes 输入appid 例如wx29ce0f21ea982cb8 二 配置AppDelega
  • 机器学习之K-means聚类算法

    目录 K means聚类算法 算法流程 优点 缺点 随机点聚类 人脸聚类 旋转物体聚类 K means聚类算法 K means聚类算法是一种无监督的学习方法 通过对样本数据进行分组来发现数据内在的结构 K means的基本思想是将n个实例分
  • 栈、队列

    一 栈 栈 author Mona public class MyStack int elements public MyStack elements new int 10 压入元素 public void push int element
  • 字节跳动Data部门员工收入证明,92年女月入14 万

    评论
  • 讲清楚 React 的重新渲染

    Web 前端开发者对渲染和重新渲染应该不陌生 在 React 中 它们究竟是什么意思 渲染 React 让组件根据当前的 props 和 state 描述它要展示的内容 重新渲染 React 让组件重新描述它要展示的内容 要将组件显示到屏幕
  • 推荐系统的挑战

    推荐系统的挑战 推荐系统简介 随着互联网2 0的发展 用户不再是数据的消费者 满足于关键词的搜索和在线浏览 而成为了数据的生产者 数据逐渐由专业机构的生产转向由用户的生产 数据量也日益剧增 信息过载油然而生 具体的表现是一是信息过滤即如何从
  • STM32单片机超声波测距(避障)

    文章目录 1 实物准备 2 原理介绍 3 代码 4 实物结果演示 1 实物准备 STM32单片机 STM32F103C8T6 超声波传感器 HC SR04 2 原理介绍 2 1 超声波传感器引脚和参数介绍 PA0 gt Trig PA1 g
  • 安卓运行linux

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 安卓直接运行arm linux gnueabi gcc编译的标准嵌入式Linux
  • kettle 抽取Excel字段,字段被系统添加.0 导致字段过长

    设置为字符串格式 并修改格式
  • Golang V1.19.1 安装配置 (windows

    目录 一 安装 1 下载地址 2 安装过程 二 环境配置 1 环境变量 2 更改代理地址 三 开发工具 1 Visual Studio Code 2 goland 一 安装 1 下载地址 https golang google cn dl
  • AnyViewer——局域网外远程控制电脑

    优势 免费 傻瓜式操作 小众 不容易涨价 缺点 手机端获取不到电脑声音 文件 手机端APP 各大应用商城即可下载 电脑端应用及使用方式 如何使用傲梅远程桌面软件 手机端和电脑端文件传输方案 阿里云盘 AnyViewer 手机端和电脑端的文件
  • 在QT的UI界面,让Widget可以跟随窗体大小而改变

    可以使用布局 Layout 机制让Widget QWidget 随窗口一起缩放和移动 Qt提供以下几种布局 QHBoxLayout 将QWidget按照水平方向依次排列 QVBoxLayout 将QWidget按照垂直方向依次排列 QGri
  • QString与char *转换

    QString转换成char 方法一 转换为Latin1字符集的char QString qstr test char ch qstr toLatin1 data qDebug lt lt ch lt