【Qt问题解答】通过QTreeWidget切换StackedWidget的页面

【Qt问题解答】【Qt问题解答】通过QTreeWidget切换StackedWidget的页面

参考资料

问题描述

希望实现点击QTreeWidget中的某个item,来切换到对应的stackedWidget中的Page。
实现过程中,碰到的问题有。当点击item(几何创建)后获取item的字符串,然后和“几何创建”比较看是否相同,来执行对应操作。但是通过item获取的字符串“几何创建”,和通过QString赋值的“几何创建”不相同,导致无法实现功能。

在这里插入图片描述
注:这里on_treeWidget_itemClicked()是自带的槽函数,可以直接使用,不用写信号和连接。

问题原因

QT中还有2个概念非常重要:

源码字符集(the source character set)源码文件是使用何种编码保存的
执行字符集(the execution character set)可执行程序内保存的是何种编码(程序执行时内存中字符串编码)

总体来说,解决方法就一个:你必须知道源码的编码和执行的编码。

QT的QString默认情况下只能正确显示UTF-8编码的字符串,因此,我们必须保证,要显示的字符串首先要转换为UTF-8,再进行显示。当然,我们也可以用代码人为的设定QString的编码。

然而,默认情况下,QT的编辑器是GB2312编码,QString是UTF-8编码,这时就会乱码,可以使用下文的方法一,把编码转为QString支持的编码

最简洁的方法就是:把源码改为UTF-8编码,这样不用做任何转换,直接就能正确显示,例如:

QString str="这是汉字";
ui->textEdit->append(str);

如果源码为GB2312,QString默认为为UTF-8,这时,要这样写才不会乱码:

QString str= QString::fromLocal8Bit("这是汉字");
ui->textEdit->append(str);

这个例子是把本地编码(我们的操作系统得编码大多为GB2312),转换为QString支持的编码。
PS:QString支持的编码是可以设置的,但是,任何时刻,都只能有一种编码生效。

解决方法

QString::fromUtf8("这是汉字");//在源代码为UTF8时使用
QString::fromLocal8Bit("这是汉字")//在本地编码转为UTF8时使用
QStringLiteral("这是汉字");

在这里插入图片描述

转换之后即可实现功能。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值