QT 中将 QString 转化为 const char * 的问题

我开始的代码是这样的:

QString qstr = "abcdef";
const char * cc = qstr.toAscii().constData();

但是此时输出 cc 要么是空,要么是乱码的。而 strlen(cc) 的值比 6 小。

将代码改为

 QString qstr = "abcdef";
QByteArray qba = qstr.toAscii();
const char * cc = qba.constData();

输出 cc, 就可以看到 abcdef 了。

原理请查看 参考文章【1】

=============

另外,在 QString 中输入中文,然后输出到 cout() 流或者 qDebug() 流中,非常容易出现乱码,有时设置 UI界面的标题也会乱码。

对于 QString 的编码具体原理也不少很懂,但是经过多次尝试发现

1 QString str = "中文";
2
3 QByteArray qba = str.toAscii();
4
5 str = QString::fromUtf8(qba);
6
7 qDebug() << str; // 输出 "中文", 在 QtCreator 里面就没有乱码了
8
9 cout << str; //同样不会乱码

用 str.toLocal8bit() 好像也可以正确编码中文。

今天发现,有时候手动修改字符串编码,显示中文还是会乱码。也就是说以上的方法是错误的,可能只是碰巧正确解码了。

可以在 main() 函数里加上

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

这样的话,整个工程的 QString 都是使用 UTF-8 来进行编码的了。当然,我的项目的编码也是 UTF-8。这样中文就能正确编码了。

推荐看 QString 与中文问题(这个 csdn 文章是转载的,但是没有写转自哪里,不过讲解的还是很清楚)和 QString中文乱码  。这两篇都说清楚了 QString 的原理。

#################  分割线   #######################

在 QThread 子类中运行 QTimer 定时器,但是定时器无法正常工作。

 void SubThread::run() {
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(process()));
timer->start();
} void SubThread::process() {
// do something
}

时间到了,触发了 timeout() 信号,但是槽函数却没有触发。

在 run() 方法的最后加上 exec() 方法就行了

 void SubThread::run() {
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(process()));
timer->start();
exec();
} void SubThread::process() {
// do something
}

--------- references -----------

【1】csdn 文章:  “QT中QString 转const char*为乱码或为空的问题 ”之解决方案

【2】csdn 文章: Qt多线程中调用QTimer

【3】csdn 文章: QString 与中文问题

【4】网易博客: QString中文乱码

QT 的使用及编写代码遇到的问题和解决方法的更多相关文章

  1. struts2视频学习笔记 19-20(手工编写代码实现所有方法和指定方法校验)

    课时19 对Action中所有方法进行输入校验 1.手工编写代码实现对action中所有方法输入校验 通过重写validate() 方法实现, validate()方法会校验action中所有与exe ...

  2. QT visual stuido 集成插件不能打开ui文件的解决方法(去掉xml的UTF8标记)

    QT visual stuido 集成插件不能打开ui文件的解决方法 visual studio里不能打开这个ui文件,出现warning等解决方法是:于是将<?xml version=&quo ...

  3. win10安装PS和AI后报代码为16的错误解决方法

    win10安装PS和AI后报代码为16的错误解决方法 一.总结 一句话总结:修改兼容性和以管理员方式运行就可以了 修改兼容性 以管理员身份运行 二.PS和AI安装后报代码为16的错误解决方法介绍(转) ...

  4. Qt中QPushButton、QTabWidget等部件内容文字换行的解决方法(一定要写在源码里,写在翻译文件里不行,因为\n得不到转义)

    最近在做基于Qt的应用项目,其中有一个按钮文字超长,需要换一行显示.从网上找到的建议都是将要显示的内容做成图片,然后将图片设置为该按钮的背景.但是这样做有一个很大的局限性,当需要更改内容文字的时候,需 ...

  5. SVN版本号管理工具使用中常见的代码提交冲突问题的解决方法

    相信刚開始学习使用SVN的小伙伴在项目合作开发的过程中一定常常遇到一些影响到自己编写的代码的苦恼.我这里列举了几种常见的问题以及问题的解决方法: 1.误删除和误操作的问题 问题1:有A和B两个人一块合 ...

  6. MyEclipse和tomcat结合编写jsp对于中文乱码的解决方法

    一.Java和jsp 中文乱码原因和解决方法: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦.原因有两方面: 第一方面:J ...

  7. WIN10 网卡驱动异常代码56的问题及解决方法

    故障描述: 原来使用正常的一个微机室,突然一天控制端主机网络连接异常,平时的网络控制软件无法使用.检查网络配置正常,网络诊断.修复.将网卡禁用也没有效果:后来删除网卡想重装,则恶运开始,无法安装驱动: ...

  8. QT编写的网页浏览器网页乱码解决方法

    1.如果是本地网页,可以将网页编码改为GB2312 <meta http-equiv="Content-Type" content="text/html; char ...

  9. Qt在Linux环境下应用程序字体模糊的解决方法(先改成使用默认字体,然后使用qtconfig配置)

    这两天一直在用Qt实现一个跨平台的软件.软件之前在Windows上编写的,后来放到里Ubuntu 10.10下编译.程序运行时遇到一个很棘手的问题,界面文本非常模糊.后来在网上查阅了好几天的资料,经历 ...

随机推荐

  1. JSP模板文本

    JSP模板文本: http://book.51cto.com/art/200907/136020.htm JSP页面就是带有JSP元素的常规Web页面,它是由JSP模版文本和JSP元素组成的.在一个J ...

  2. class path resource [config.xml] cannot be opened because it does not exist

    初学Spring在用Resource rs=new ClassPathResource("applicationContext.xml");时老是遇到这个错误.后来发现用Appli ...

  3. 支撑Pinterest日均1000+次试验的A/B测试平台揭秘

    编者按:本文详细介绍了 Pinterest 内部A/B测试平台的搭建过程,对于无论是有技术能力和资源想要自建A/B测试系统的大公司,还是想在业务中引入第三方A/B测试方法和工具的中小公司都极具参考意义 ...

  4. ArcGIS Pro 简明教程(3)数据编辑

    ArcGIS Pro 简明教程(3)数据编辑 by 李远祥 数据编辑是GIS中最常用的功能之一,ArcGIS Pro在GIS数据编辑上使用习惯有一定的改变,因此,本章可以重点看看一些编辑工具的使用和使 ...

  5. 一个普通底层.NET程序员关于职场瓶颈期的思考,辗转自我提升/跳槽/转行之间

    徒有工龄,没技术没学历没平台没家底,工作几年,无车无房无存款还前景不明. 时常有身边的亲友问怎么学开发怎么转互联网,说起IT行业都说工资高,动辄月薪上万动辄年薪几十万. 再看看自己,我可能是假的程序员 ...

  6. 告诉你 IOS9.0 之后的Bitcode到底是什么!!

    用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: ld: ‘/Users/**/Framework/SDKs/PolymerPa ...

  7. iOS之网络数据下载和JSON解析

    iOS之网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍IOS中如何利用NSURLconnection从网络上下载数据以及如何解析下载下来的JSON数据格式,以及如何显示数据和托图片的异步 ...

  8. http状态码及解释

    简单版: 100  Continue   继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息 200  OK         正常返回 ...

  9. BZOJ 1337: 最小圆覆盖1336: [Balkan2002]Alien最小圆覆盖(随机增量法)

    今天才知道有一种东西叫随机增量法就来学了= = 挺神奇的= = A.令ci为包括前i个点的最小圆,若第i+1个点无法被ci覆盖,则第i+1个点一定在ci+1上 B.令ci为包括前i个点的最小圆且p在边 ...

  10. Noip 2014酱油记+简要题解

    好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...