MFC转QT踩坑记录

news2024/11/20 13:24:13

1、中文乱码

QT + msvc编译器版本默认编译的是字符串编码是ANSI,

而QTCreator默认创建的cpp字符串编码是UTF-8,然后msvc还是按ANSI去解析字符串常量,所以导致了中文乱码

解决方案:

使用notepad++把cpp编码从UTF-8转成 UTF-8带BOM

然后在pro加入下面脚本告诉msvc编译器,字符串常量是UTF-8编码,这样就不需要使用

QStringLiteral到处去包含字符串常量了
msvc {
    QMAKE_CFLAGS += /utf-8
    QMAKE_CXXFLAGS += /utf-8
}

2、API接口ANSI版本和Unicode版本

QString DwTool::GetExePath()
{
    char szPath[_MAX_PATH];
    ::GetModuleFileName(NULL, szPath, _MAX_PATH);
    return QString::fromLocal8Bit(szPath);  
}

 因为QT默认是Unicode编码,所以上面的代码实际上是下面这样,当然编译不通过了

QString DwTool::GetExePath()
{
    char szPath[_MAX_PATH];
    ::GetModuleFileNameW(NULL, szPath, _MAX_PATH);
    return QString::fromLocal8Bit(szPath);  
}

解决方案1:

改成这样,使用ANSI版本windows api

QString DwTool::GetExePath()
{
    char szPath[_MAX_PATH];
    ::GetModuleFileNameA(NULL, szPath, _MAX_PATH);
    return QString::fromLocal8Bit(szPath);  
}

或者改成这样,使用Unicode版本的windows api

QString DwTool::GetExePath()
{
    TCHAR szPath[_MAX_PATH];
    ::GetModuleFileName(NULL, szPath, _MAX_PATH);
    return QString::fromStdWString(szPath);  
}

3、QString能接受参数为const char*的字符串

但是注意它接受的是utf-8编码的字符串,而不是ANSI编码的

#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
    inline QT_ASCII_CAST_WARN QString(const char *ch)
        : d(fromAscii_helper(ch, ch ? int(strlen(ch)) : -1))
    {}

fromAscii_helper单步进去,就是QString::fromUtf8

如果还是按照MFC习惯,传入ANSI字符串给它,就会导致中文乱码

4、QString内部存储成UTF-8,若需要其它编码,都需要转换,常用的转换函数有

QString转ANSI         

strServer.toLocal8Bit().data()

QString转UTF-8

strDateTime.toUtf8().data()

5、QString的trimmed函数和CString的Trim函数是不同的

QString的trimmed不会影响调用者,它是返回一个去除了空格符的新字符串

而CString的Trim是影响调用者

 6、COleDateTime精度是秒,而QDateTime精度为毫秒

并且,Ado编程,设置时间值也会截断毫秒,但是看MSDN文档说是COledDateTime支持毫秒

我目前找不到办法,有找到的CSDN水友私信我,谢谢

7、多字节CString的GetLength和 QString的size函数

CString strA = "中国伟大复兴123abc"

strA.GetLength()为18   字节数

QString str = "中国伟大复兴123abc"

str.size()为12  字符数

而windows一些api需要传入的是字节数,一定要注意!!!!!!!!!!!

如果用QString想获取字节数,需要先转为QByteArray,再调用size()去获取字节数

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT 之父承认 GPT-5 并不存在,为什么 OpenAI 总是这么实诚?|万字详述

ChatGPT 诞生前传 来源: 爱范儿 微信号:ifanr 最近,OpenAI 的 CEO Sam Altman 在一场公开会议上为 GPT-5 辟谣。 他声称 OpenAI 并没有在训练 GPT-5,而是一直基于 GPT-4 做别的工作。 OpenAI 是一家非常有趣的机构,和微软、Go…

用SQL语句操作Oracle数据库——数据更新

数据更新 数据库中的数据更新操作有3种:1)向表中添加若干行数据(增);2)删除表中的若干行数据(删);3)修改表中的数据(改)。对于这3种操作&#xf…

提升项目沟通效果的核心方法

项目沟通是项目管理中的核心之一,项目成败的关键因素之一就是项目团队之间的沟通效果。良好的项目沟通可以增强团队的合作力和凝聚力,确保项目按时完成,达成项目目标。那么提升项目沟通效果的方法有哪些呢?。1、制定沟通计划 在项…

JAVAWeb06-动态WEB开发核心Servlet-01

1. 概述 1.1 官方文档 地址: https://tomcat.apache.org/tomcat-8.0-doc/servletapi/index.html 1.2 Servlet 和 Tomcat 的关系 一句话, Tomcat 支持 Servlet(谁也不能离开谁) 1.3 为什么会出现 Servlet 提出需求: 请用你现有的html css javascrip…

PS封装格式:GB28181协议RTP传输

在安防行业,有个协议是无论如何都要适配的,因为公安监控网络用的就是它,它就是:GB28181。而这份协议主要由海康制定,所以除了海康其他厂商想要适配都会少许有点儿麻烦。 1. GB28181要求的RTP流格式     首先&…

Ansible 进阶

模块应用 firewalld模块 可以配置防火墙策略 [rootcontrol ~]# vim ~/ansible/firewall.yml --- - hosts: test #hosts定义需要远程的主机tasks: #tasks定义需要执行哪些任务- name: install firewalld. …

ChatGPT已过时?Auto-GPT迅速走红,无需人类插手自主解决复杂任务,GitHub标星5万

来源: AI前线 微信号:ai-front 作者 | Luke Larsen ChatGPT 之所以能风靡全球,很大程度上要归功于其简单的功能框架。作为一款 AI 聊天机器人,它唯一的作用就是生成令人信服的自然语言文本、顺畅回应用户的提问。 但 AI 聊天机器人的使用体…

大数据分析案例-基于XGBoost算法预测航空机票价格

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集…

实在智能获评十大数字经济风云企业,2022余杭数字经济“群英榜”发布

4月17日,经专家评审、公开投票,由中共杭州市余杭区委组织部(区委两新工委)、中共杭州市余杭区经济和信息化局委员会主办评选的2022年度余杭区数字经济“群英榜”正式公示。其中,实在智能成功获评十大数字经济风云企业之…

cocoscreator性能优化4-Sprite颜色数据去除

前言 Sprite是游戏内容的一个基本组成元素,包括ui、道具、立绘等各种地方都会用到。大部分情况下美术会帮我们调好图片颜色,我们只要把图片直接放到游戏里就行了。Sprite默认的渲染顶点数据中包含了颜色数据,由于我们并不需要去修改颜色&…

【Python】AttributeError: ‘list‘ object has no attribute ‘corr‘

一、问题描述 在绘制相关分析热力图的时候: import seaborn as sns to_corr [Age, Income, Kidhome, Teenhome, Recency, Complain, MntWines, MntFruits, MntMeatProducts, MntFishProducts, MntSweetProducts, MntGoldProds, NumDealsPurchases, AcceptedCmp1,…

如何将 Spire.Doc for C++ 集成到 C++ 程序中

Spire.Doc for C 是一个专业的 Word 库,供开发人员在任何类型的 C 应用程序中阅读、创建、编辑、比较和转换 Word 文档。 本文演示了如何以两种不同的方式将 Spire.Doc for C 集成到您的 C 应用程序中。 通过 NuGet 安装 Spire.Doc for C通过手动导入库安装 Spire.…

tomcat配置虚拟主机

文章目录 tomcat配置虚拟主机环境修改tomcat主配置文件server.xml配置配置虚拟主机目录以及文件重新启动tomcat修改windows的hosts文件浏览器测试 tomcat配置虚拟主机 环境 java version “1.8.0_261”Server version: Apache Tomcat/8.5.20 修改tomcat主配置文件server.xml…

缺省参数-函数重载

缺省参数 缺省参数是声明或定义函数时为函数的参数指定一个默认值 有什么用? 更加灵活的增加默认值,或者手动给一个初始值,解决了C语言#define给死一个值的缺陷,C语言无法做到缺省参数这么灵活 struct Stack {int* a;int top;in…

北邮22信通:(13)第三章 3.4 串的实现 KMP算法

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 上一篇文章: 下一篇文章: ***说明*** 1.本代码结合书上第二章线性表和4.3.3KMP算法结合书写。 2.加快匹配速度的根本原因&#xff1…

行业分析| 新的学习方式——在线自习室

互联网技术在快速革新中不断推动新应用、新场景、新模式和新业态的发展融通,如近年来不断催生的游戏直播、直播带货、户外直播等网络生态。随着互联网用户逐年增多,年轻化趋势明显,互联网直播内容逐渐向生活化、日常化拓展,加之“…

Linux 防火墙常用命令

目录 前文叙述 Linux 找不到 firewall 命令 firewalld 常用管理命令 firewall-cmd 常用命令参数说明 前文叙述 Linux 防火墙默认为开启状态,生产环境下 Linux 防火墙也肯定是开启状态。因此在生产环境下往往是开放特定端口让外部进行连接使用。 Linux 找不到 fir…

数字化时代,企业为什么越来越重视数据分析

自数据成为第五大生产要素后,其价值得到了越来越多企业的认可,也成为了各行各业企业的重要的资产。而信息化建设在企业中的发展更是给了数据增长的机会,随着业务信息系统在企业中成为基础建设,众多企业都通过业务系统沉淀了大量业…

JSP的基本使用总结

JSP的基本使用总结 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在…

海睿思分享 | 风控监管,守住企业生命线

1 企业如何应对市场风险 随着市场形势日益严峻,企业风险系数也在同步增加,一旦风险管理出现重大问题,将是致命的、灾难性的,可能导致企业出现生存危机。 风控监管的主要目的在于通过对各类风险进行识别、分析、监控&#xff0c…