QT使用API进行读配置文件

whppmy 2017-12-06 03:28:27
假设文件QString Filepath=F:/my.ini
读取的是
[ini]
color=red

我想获取red
参数怎么写?GetPrivateProfileString(); 注意是用QString

另外QSetting读取配置文件乱码 才用的这种方式 配置文件是Unicode编码(不能更改)
...全文
513 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
whppmy 2017-12-18
  • 打赏
  • 举报
回复
引用 20 楼 tajon1226 的回复:
[quote=引用 2 楼 A852852852852 的回复:] [quote=引用 1 楼 year2002 的回复:] char color[256]; GetPrivateProfileString("ini", "color", "white", color, sizeof(color), "f:/my.ini"); QString str(color);
mfc可以 QT编译不过去[/quote] 1)GetPrivateProfileString这种写法是错误的,windows API并没有这个函数,这个宏而已。 多字节你就用GetPrivateProfileStringA Unicode你就用GetPrivateProfileStringW而且这里的Unicode指的是UTF-16,至于windows带W的API是大端还是小端我忘记了。 2)用不了MFC,windows.h总该可以用吧。Winbase.h (include Windows.h) 3)如果你的ini既不是ANSI也不是UTF16编码,那你就得自己做编码转换,再用GetPrivateProfileStringW函数。 4)其实如果你不需要写该配置文件,完全可以把ini转成UTF8再操作的,就一个代码页转换的问题, 5)更简单的办法可以上网去搜ini读取的库,那个库我记得是基于内存buf去读的,而不是文件。[/quote]感谢
走好每一步 2017-12-12
  • 打赏
  • 举报
回复
QSetting 貌似Unicode读取是无效的,我印象以前我试过,不过我暂时不需要弄unicode,所以懒得去研究。
走好每一步 2017-12-12
  • 打赏
  • 举报
回复
引用 2 楼 A852852852852 的回复:
[quote=引用 1 楼 year2002 的回复:] char color[256]; GetPrivateProfileString("ini", "color", "white", color, sizeof(color), "f:/my.ini"); QString str(color);
mfc可以 QT编译不过去[/quote] 1)GetPrivateProfileString这种写法是错误的,windows API并没有这个函数,这个宏而已。 多字节你就用GetPrivateProfileStringA Unicode你就用GetPrivateProfileStringW而且这里的Unicode指的是UTF-16,至于windows带W的API是大端还是小端我忘记了。 2)用不了MFC,windows.h总该可以用吧。Winbase.h (include Windows.h) 3)如果你的ini既不是ANSI也不是UTF16编码,那你就得自己做编码转换,再用GetPrivateProfileStringW函数。 4)其实如果你不需要写该配置文件,完全可以把ini转成UTF8再操作的,就一个代码页转换的问题, 5)更简单的办法可以上网去搜ini读取的库,那个库我记得是基于内存buf去读的,而不是文件。
走好每一步 2017-12-12
  • 打赏
  • 举报
回复
Unicode编码分很多种 UTF8不带bom UTF8带bom UTF16 大端 UTF16 小端 UTF32 等等。。。 1)你先确认下自己的编码是何种编码?用Ultra Edit或者Notepad++查看 2)“读出来还是乱码”,对电脑来说是没有乱码的,对人来说是会乱码。 3)QFile读出来就是二进制流,跟乱码有什么关系呢?你自己转换的时候代码页没转对。 4)用windows API写一个很简单的,类库只是避免你的重复劳动而已 5)多用下UltraEdit,进入16进制模式,你能看懂二进制编码,就不会糊涂了。
张小飞Official 2017-12-12
  • 打赏
  • 举报
回复
引用 15 楼 A852852852852 的回复:
引用 14 楼 u010370871 的回复:
[quote=引用 12 楼 A852852852852 的回复:] [quote=引用 10 楼 u010370871 的回复:] [quote=引用 8 楼 A852852852852 的回复:] [quote=引用 4 楼 u010370871 的回复:] 这就是个文本文件啊,可以直接用QFile打开啊,一行行读取不就行了么?就是个字符串操作。
效率上和操作便利上都不行吧
效率跟操作便利哪里不行?就用STL分割个字符串而已,这么简单还不行?比正则快多了[/quote]这么说读取配置文件的类就没必要存在了[/quote] 这个自己写有那么难么?[/quote]不是难不难 现在我就是用的QFile读ini 那你怎么修改呢?另外创个文件吗[/quote] open的时候有参数,QIODevice有一些枚举值
whppmy 2017-12-12
  • 打赏
  • 举报
回复
引用 13 楼 Inhibitory 的回复:
1. 中文: void QSettings::setIniCodec(QTextCodec *codec)
2. 分组: void QSettings::beginGroup(const QString &prefix)
读出来还是乱码
whppmy 2017-12-12
  • 打赏
  • 举报
回复
引用 14 楼 u010370871 的回复:
引用 12 楼 A852852852852 的回复:
[quote=引用 10 楼 u010370871 的回复:] [quote=引用 8 楼 A852852852852 的回复:] [quote=引用 4 楼 u010370871 的回复:] 这就是个文本文件啊,可以直接用QFile打开啊,一行行读取不就行了么?就是个字符串操作。
效率上和操作便利上都不行吧
效率跟操作便利哪里不行?就用STL分割个字符串而已,这么简单还不行?比正则快多了[/quote]这么说读取配置文件的类就没必要存在了[/quote] 这个自己写有那么难么?[/quote]不是难不难 现在我就是用的QFile读ini 那你怎么修改呢?另外创个文件吗
Inhibitory 2017-12-12
  • 打赏
  • 举报
回复
settings.setIniCodec("UTF-8") 或者 settings.setIniCodec("GBK"),根据你的文件编码而定。
whppmy 2017-12-11
  • 打赏
  • 举报
回复
引用 10 楼 u010370871 的回复:
引用 8 楼 A852852852852 的回复:
[quote=引用 4 楼 u010370871 的回复:] 这就是个文本文件啊,可以直接用QFile打开啊,一行行读取不就行了么?就是个字符串操作。
效率上和操作便利上都不行吧
效率跟操作便利哪里不行?就用STL分割个字符串而已,这么简单还不行?比正则快多了[/quote]这么说读取配置文件的类就没必要存在了
whppmy 2017-12-11
  • 打赏
  • 举报
回复
引用 6 楼 goldenhawking 的回复:
有现成的QSettings
QSettings读unicode编码文件乱码 平台5.6.0 设置过QSettings的编码了 还是不行 求姿势
张小飞Official 2017-12-11
  • 打赏
  • 举报
回复
引用 8 楼 A852852852852 的回复:
引用 4 楼 u010370871 的回复:
这就是个文本文件啊,可以直接用QFile打开啊,一行行读取不就行了么?就是个字符串操作。
效率上和操作便利上都不行吧
效率跟操作便利哪里不行?就用STL分割个字符串而已,这么简单还不行?比正则快多了
whppmy 2017-12-11
  • 打赏
  • 举报
回复
引用 5 楼 tajon1226 的回复:
为什么一定要用Unicode,UTF8编码满足不了吗?
因为是读取另外一个程序的配置文件 编码不能修改
whppmy 2017-12-11
  • 打赏
  • 举报
回复
引用 4 楼 u010370871 的回复:
这就是个文本文件啊,可以直接用QFile打开啊,一行行读取不就行了么?就是个字符串操作。
效率上和操作便利上都不行吧
whppmy 2017-12-11
  • 打赏
  • 举报
回复
引用 3 楼 year2002 的回复:
[quote=引用 2 楼 A852852852852 的回复:] [quote=引用 1 楼 year2002 的回复:] char color[256]; GetPrivateProfileString("ini", "color", "white", color, sizeof(color), "f:/my.ini"); QString str(color);
mfc可以 QT编译不过去[/quote] [/quote] 奇怪了。。。我用的5.6.0版本
张小飞Official 2017-12-11
  • 打赏
  • 举报
回复
引用 12 楼 A852852852852 的回复:
引用 10 楼 u010370871 的回复:
[quote=引用 8 楼 A852852852852 的回复:] [quote=引用 4 楼 u010370871 的回复:] 这就是个文本文件啊,可以直接用QFile打开啊,一行行读取不就行了么?就是个字符串操作。
效率上和操作便利上都不行吧
效率跟操作便利哪里不行?就用STL分割个字符串而已,这么简单还不行?比正则快多了[/quote]这么说读取配置文件的类就没必要存在了[/quote] 这个自己写有那么难么?
Inhibitory 2017-12-11
  • 打赏
  • 举报
回复
1. 中文: void QSettings::setIniCodec(QTextCodec *codec) 2. 分组: void QSettings::beginGroup(const QString &prefix)
  • 打赏
  • 举报
回复
有现成的QSettings
走好每一步 2017-12-07
  • 打赏
  • 举报
回复
为什么一定要用Unicode,UTF8编码满足不了吗?
张小飞Official 2017-12-07
  • 打赏
  • 举报
回复
这就是个文本文件啊,可以直接用QFile打开啊,一行行读取不就行了么?就是个字符串操作。
  • 打赏
  • 举报
回复
引用 2 楼 A852852852852 的回复:
[quote=引用 1 楼 year2002 的回复:]
char color[256];
GetPrivateProfileString("ini", "color", "white", color, sizeof(color), "f:/my.ini");
QString str(color);
mfc可以 QT编译不过去[/quote]
加载更多回复(2)

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧