vs2005+qt4 问题记录
vs2005+qt4 问题记录
一、QT中文乱码问题
问题描述:QT界面程序中的中文都会显示乱码。
解决方案:在QMainWindow子类构造函数里调用:
:QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
在要用到中文的地方使用tr()转换一下;
二、ifstream,ofstream打开中文路径出错
问题描述:使用ifstream或ofstream打开文件时,若文件路径中包含中文,则会打开失败。
解决方案:在网上搜了下,解决方法主要有以下几种:
1 /*********************************************************************************/
2 /* 方法1,使用_TEXT()宏定义将字符串常量指定为TCHAR*类型,该方法只适用于字符串常量*/
3 /*********************************************************************************/
4 fstream file;
5 file.open(_TEXT("c:\\测试\\测试文本.txt"));
6 cout<<file.rdbuf();
7 file.close();
2 /* 方法1,使用_TEXT()宏定义将字符串常量指定为TCHAR*类型,该方法只适用于字符串常量*/
3 /*********************************************************************************/
4 fstream file;
5 file.open(_TEXT("c:\\测试\\测试文本.txt"));
6 cout<<file.rdbuf();
7 file.close();
1 /************************************************************************/
2 /* 方法2,使用STL中的locale类的静态方法指定全局locale */
3 /* 使用该方法以后,cout可能不能正常输出中文,十分蹊跷 */
4 /* 勉强解决的方法:不要在还原区域设定前用cout或wcout 输出中文 */
5 /* 否则后果就是还原区域设定后无法使用cout wcout输出中文 */
6 /************************************************************************/
7 locale::global(locale(""));//将全局区域设为操作系统默认区域
8 file.open("c:\\测试\\测试文本2.txt");//可以顺利打开文件了
9 locale::global(locale("C"));//还原全局区域设定
10 cout<<file.rdbuf();
11 file.close();
3 /* 使用该方法以后,cout可能不能正常输出中文,十分蹊跷 */
4 /* 勉强解决的方法:不要在还原区域设定前用cout或wcout 输出中文 */
5 /* 否则后果就是还原区域设定后无法使用cout wcout输出中文 */
6 /************************************************************************/
7 locale::global(locale(""));//将全局区域设为操作系统默认区域
8 file.open("c:\\测试\\测试文本2.txt");//可以顺利打开文件了
9 locale::global(locale("C"));//还原全局区域设定
10 cout<<file.rdbuf();
11 file.close();
1 /************************************************************************/
2 /* 方法3,使用C函数setlocale,不能用cout输出中文的问题解决方法同上 */
3 /************************************************************************/
4 setlocale(LC_ALL,"Chinese-simplified");//设置中文环境
5 file.open("c:\\测试\\测试文本3.txt");//可以顺利打开文件了
6 setlocale(LC_ALL,"C");//还原
7 cout<<file.rdbuf();
8 file.close();
2 /* 方法3,使用C函数setlocale,不能用cout输出中文的问题解决方法同上 */
3 /************************************************************************/
4 setlocale(LC_ALL,"Chinese-simplified");//设置中文环境
5 file.open("c:\\测试\\测试文本3.txt");//可以顺利打开文件了
6 setlocale(LC_ALL,"C");//还原
7 cout<<file.rdbuf();
8 file.close();
1 /************************************************************************/
2 /* 方法4,适用于QT环境 */
3 /************************************************************************/
4 QFileDialog *dlg;
5 QString path = dlg->getOpenFileName(
);
6 file.open((wchar_t*)path.utf16());
2 /* 方法4,适用于QT环境 */
3 /************************************************************************/
4 QFileDialog *dlg;
5 QString path = dlg->getOpenFileName(
![](https://www.cnblogs.com/Images/dot.gif)
6 file.open((wchar_t*)path.utf16());
三、QT应用程序图标修改
1.找到.qrc文件,没有的就自己在工程目录下新建一个”工程名.qrc”,在里面加入
1 <RCC>
2 <qresource prefix="/">
3
4 </qresource>
5 </RCC>
2 <qresource prefix="/">
3
4 </qresource>
5 </RCC>
将该.qrc文件导入为vs2005工程资源,并在vs2005里打开,如图:
右键菜单里选择Add File,出来对话框,选择import,选择你要添加的图片,重新编译。如图
打开.rc文件,可以看到里面有一行:
IDI_ICON1 ICON DISCARDABLE "test.ico"
把test.ico改成你导入的ico
注:好像只支持.ico当图标,我用.png会提示错误。
四、应用程序发布
Release+动态链接
需要拷贝的动态链接库:
1 Microsoft.VC80.CRT.manifest //跟VC6不一样,这个必须有,不然会出现“由于应用程序配置不正确 应用程序未能启动”的错误
2 msvcp80.dll
3 msvcr80.dll
4 QtCore4.dll
5 QtGui4.dll
2 msvcp80.dll
3 msvcr80.dll
4 QtCore4.dll
5 QtGui4.dll
基本上就这几个,如果用到其他QT库,再另外添加。