【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("这是汉字");
转换之后即可实现功能。