在Qt中,如何安全地从C++11的`stdstring`转换为`QString`?
时间: 2024-09-20 10:00:35 浏览: 47
C++各种数据类型相互转化笔记
在Qt中,从C++11的`std::string`转换为`QString`可以使用`QByteArray`作为桥梁。首先将`std::string`转换为`QByteArray`,然后通过`QByteArray`构造一个`QString`。这是比较安全的做法,因为它避免了潜在的编码问题:
```cpp
std::string str = "Your string";
QByteArray ba(str.begin(), str.end());
QString qs(ba); // 使用 QByteArray 构造 QString
```
如果你需要频繁转换,还可以考虑注册一个全局转换函数或者创建一个专门的辅助函数来进行这种类型的安全转换:
```cpp
Q_DECLARE_METATYPE(std::string)
void toQString(QMetaObject *m, QObject *sender, int signalIndex, void **arguments) {
if (signalIndex == SIGNAL_TYPE_index && arguments[0]) {
std::string *str = static_cast<std::string*>(*arguments);
*arguments = new QString(*str);
}
}
// 然后在信号槽连接时,传递 std::string 直接会自动转换
connect(sender, &YourClass::yourSignal, this, [str](std::string s) { qs = QString(s); }, Qt::QueuedConnection);
```
阅读全文