我真是太上皇℃ 这个书生不太帅
noway
关注数: 53 粉丝数: 195 发帖数: 2,851 关注贴吧数: 62
【QT静态库】使用vs2015架设QT开发环境,静态编译,并兼容xp 一、QT静态库 可以自己编译,也可以下载别人编译好的,这里是下载地址(QT静态库) http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.npcglib.org%2F~stathis%2Fblog%2Fprecompiled-qt4-qt5%2F&urlrefer=b75bf269d7a1347459f273b57202e39b 二、安装Qt5Package 在vs2015的“扩展和更新”中寻找《Qt5Package》这个扩展,然后安装,并重启 打开扩展QT5,配置QT静态库中的bin目录,然后Reinstall template…… 新建一个QT5应用程序。 三、配置项目 虽然利用扩展给我们创建了一个项目模版,但是这个模版只能使用qt的动态库,静态库无法使用 如果想编译静态编译,需要配置以下信息: 1、首先,在“链接器”-》“常规”-》“附加库目录”-》添加《qt5-x86-static-release\plugins\platforms》,即平台扩展静态库 2、在“链接器”-》“输入”-》“附加依赖项”-》新增下面这些库 qtmain.lib Qt5Core.lib Qt5Gui.lib Qt5Widgets.lib *******上面是扩展给我们自动配好的,下面是我们自己新增的******* Qt5PlatformSupport.lib qminimal.lib qoffscreen.lib qwindows.lib qtfreetype.lib qtharfbuzzng.lib qtpcre.lib imm32.lib winmm.lib opengl32.lib ws2_32.lib 3、在项目中找到main.cpp这个文件,在开头插入下面的代码,即可导入平台扩展静态库的头文件 #include <QtPlugin> Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) 4、如果是release版本,要在“代码生成”-》“运行库”,选择MT,debug为MTD 5、如果要兼容xp,平台工具集-》选择《v140_xp》
【技术贴】C++中Ansii、unicode与Utf8之间的相互转化 #include "stdafx.h" #include "windows.h" #include <iostream> #include <string> #include <memory> using namespace std; wstring AnsiiToUnicode(const string& str) { // 参数的长度 int strLen = str.length(); // 预算-缓冲区中宽字节的长度 int unicodeLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, nullptr, 0); // 给指向缓冲区的指针变量分配内存 allocator<wchar_t> wc_t; wchar_t *pUnicode = wc_t.allocate(sizeof(wchar_t)*(unicodeLen+1),0); // 开始向缓冲区转换字节 MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, pUnicode, unicodeLen); wstring ret_str = pUnicode; delete pUnicode; return ret_str; } string UnicodeToAssii(const wstring& wstr) { // 参数的长度 int wstrLen = wstr.length(); // 预算-缓冲区中多字节的长度 int ansiiLen = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, nullptr, 0,nullptr,nullptr); // 给指向缓冲区的指针变量分配内存 allocator<char> c_t; char *pAssii = c_t.allocate(sizeof(char)*(ansiiLen + 1), 0); // 开始向缓冲区转换字节 WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, pAssii, ansiiLen,nullptr,nullptr); string ret_str = pAssii; delete pAssii; return ret_str; } wstring Utf8ToUnicode(const string& str) { // 参数的长度 int strLen = str.length(); // 预算-缓冲区中宽字节的长度 int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0); // 给指向缓冲区的指针变量分配内存 allocator<wchar_t> wc_t; wchar_t *pUnicode = wc_t.allocate(sizeof(wchar_t)*(unicodeLen + 1), 0); // 开始向缓冲区转换字节 MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, pUnicode, unicodeLen); wstring ret_str = pUnicode; delete pUnicode; return ret_str; } string UnicodeToUtf8(const wstring& wstr) { // 参数的长度 int wstrLen = wstr.length(); // 预算-缓冲区中多字节的长度 int ansiiLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr); // 给指向缓冲区的指针变量分配内存 allocator<char> c_t; char *pAssii = c_t.allocate(sizeof(char)*(ansiiLen + 1), 0); // 开始向缓冲区转换字节 WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr); string ret_str = pAssii; delete pAssii; return ret_str; } string AnsiiToUtf8(const string& str) { return UnicodeToUtf8(AnsiiToUnicode(str)); } string Utf8ToAnsii(const string& str) { return UnicodeToAssii(Utf8ToUnicode(str)); } int main() { string mul_str = "he中国\0"; wstring wstr = AnsiiToUnicode(mul_str); cout << mul_str.size() << "|"<< wstr.size() << endl; string str = UnicodeToUtf8(wstr); cout << str.size() << "|" << wstr.length() << endl; return 0; }
首页 1 2 下一页