QString转换为LPTSTR(使用reinterpret_cast)

本文探讨了在QT环境中如何使用reinterpret_cast将QString类型转换为LPTSTR。同时,还介绍了QString与其他字符类型如wchar_t *, TCHAR以及CString之间的转换方法。参考链接提供了更多详细信息。" 54426923,5821195,浏览器兼容性处理:实现辅助线跟随鼠标移动,"['前端开发', 'JavaScript', '浏览器差异', 'DOM操作']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QString str = "CPU";  
const wchar_t * str_cpu = reinterpret_cast<const wchar_t *>(str.utf16());//char * 转换为 wchar_t * 类型  

  QT QString, wchar_t *, TCHAR, CString和其他字符或字符串类型的转化

//QString to wchar_t *:  
const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(fileName.utf16());  
  
//QString to char * given a file name:  
QByteArray fileName = QFile::encodeName(aFileName);  
const char * encodedName = fileName.constData(); //Valid as long as fileName exists  
  
//QString to char * (general case):  
const char * tmp = str.toUtf8().constData();  
[/code]  
Windows 数据类型: http://msdn.microsoft.com/en-us/library/aa383751.aspx  
[code lang="cpp"]  
//TCHAR:  
#ifdef UNICODE  
typedef wchar_t TCHAR;  
#else  
typedef char TCHAR;  
#endif  
  
//LPCTSTR:  
#ifdef UNICODE  
typedef LPCWSTR LPCTSTR;  
#else  
typedef LPCSTR LPCTSTR;  
#endif  
  
//LPCSTR:  
typedef const char * LPCSTR;  
  
//LPCWSTR:  
typedef const wchar_t * LPCWSTR;  
  
//LPCWSTR to QString:  
QString text(QString::fromUtf16(reinterpret_cast<const unsigned short *>(tmp)));  
另一种解决办法是使用QString::fromWCharArray(),但这个函数可能导致一些尚未解决的wchar_t符号问题。  
  
最佳的编程风格: 使用L来定义wchar_t宽字符串,比如 L"text" 字义了一个UNICODE字符串"text"。  
  
今天又看到一个文章,关于字符串之间的转换,比较全面,在此将英文翻译并整理一下。  
原文地址:http://hi.baidu.com/koko200147/blog/item/7e3cad828c9b9bb66d8119cb.html  
  
QStr
void FloorDet::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { auto *_t = static_cast<FloorDet *>(_o); Q_UNUSED(_t) switch (_id) { case 0: _t->openCam(); break; case 1: _t->destroyCam(); break; case 2: _t->startCam(); break; case 3: _t->startcam(); break; case 4: _t->softCam(); break; case 5: _t->SendLog2((*reinterpret_cast< QString(*)>(_a[1]))); break; case 6: _t->sendtoolsA((*reinterpret_cast< cv::Mat(*)>(_a[1])),(*reinterpret_cast< cv::Mat(*)>(_a[2]))); break; case 7: _t->sendtoolsB((*reinterpret_cast< cv::Mat(*)>(_a[1])),(*reinterpret_cast< cv::Mat(*)>(_a[2]))); break; case 8: _t->chufa(); break; case 9: _t->cfclearD(); break; case 10: _t->pictureA11(); break; case 11: _t->pictureA12(); break; case 12: _t->pictureB1(); break; case 13: _t->pictureB2(); break; case 14: _t->pictureB3(); break; case 15: _t->XSzs_m((*reinterpret_cast< QString(*)>(_a[1]))); break; case 16: _t->XSng_m((*reinterpret_cast< QString(*)>(_a[1]))); break; case 17: _t->XSbb_m((*reinterpret_cast< QString(*)>(_a[1]))); break; case 18: _t->XSyw_m((*reinterpret_cast< QString(*)>(_a[1]))); break; case 19: _t->XShs_m((*reinterpret_cast< QString(*)>(_a[1]))); break; case 20: _t->XSll_m((*reinterpret_cast< QString(*)>(_a[1]))); break; case 21: _t->on_Start_clicked(); break; case 22: _t->on_Stop_clicked(); break; case 23: _t->on_pushButton_clicked(); break; case 24: _t->WriteLog((*reinterpret_cast< QString(*)>(_a[1]))); break; case 25: _t->clearD(); break; case 26: _t->showB1(); break; case 27: _t->showB2(); break; case 28: _t->showB3(); break; case 29: _t->showA11(); break; case 30: _t->showA12(); break; case 31: _t->showA21((*reinterpret_cast< QImage(*)>(_a[1]))); break; case 32: _t->showA22((*reinterpret_cast< QImage(*)>(_a[1]))); break; case 33: _t->showA31((*reinterpret_cast< QImage(*)>(_a[1]))); break; case 34: _t->showA32((*reinterpret_cast< QImage(*)>(_a[1]))); break; case 35: _t->YANSHI(); break; case 36: _t->writelogs((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; case 37: _t->LoadStationA21Img(); break; case 38: _t->LoadStationA22Img((*reinterpret_cast< std::string(*)>(_a[1]))); break; case 39: _t->LoadStationA31Img((*reinterpret_cast< std::string(*)>(_a[1]))); break; case 40: _t->LoadStationA32Img((*reinterpret_cast< std::string(*)>(_a[1]))); break; case 41: _t->resizeWindow(); break; default: ; } } else if (_c == QMetaObject::IndexOfMethod) { int *result = reinterpret_cast<int *>(_a[0]); { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::openCam)) { *result = 0; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::destroyCam)) { *result = 1; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::startCam)) { *result = 2; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::startcam)) { *result = 3; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::softCam)) { *result = 4; return; } } { using _t = void (FloorDet::*)(QString ); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::SendLog2)) { *result = 5; return; } } { using _t = void (FloorDet::*)(cv::Mat , cv::Mat ); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::sendtoolsA)) { *result = 6; return; } } { using _t = void (FloorDet::*)(cv::Mat , cv::Mat ); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::sendtoolsB)) { *result = 7; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::chufa)) { *result = 8; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::cfclearD)) { *result = 9; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::pictureA11)) { *result = 10; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::pictureA12)) { *result = 11; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::pictureB1)) { *result = 12; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::pictureB2)) { *result = 13; return; } } { using _t = void (FloorDet::*)(); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::pictureB3)) { *result = 14; return; } } { using _t = void (FloorDet::*)(QString ); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::XSzs_m)) { *result = 15; return; } } { using _t = void (FloorDet::*)(QString ); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::XSng_m)) { *result = 16; return; } } { using _t = void (FloorDet::*)(QString ); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::XSbb_m)) { *result = 17; return; } } { using _t = void (FloorDet::*)(QString ); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::XSyw_m)) { *result = 18; return; } } { using _t = void (FloorDet::*)(QString ); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::XShs_m)) { *result = 19; return; } } { using _t = void (FloorDet::*)(QString ); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FloorDet::XSll_m)) { *result = 20; return; } } } }解释一下这段代码
最新发布
07-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值