我看过其他几篇关于将 QString 转换为 std::string 的帖子,它应该很简单。但不知怎的,我收到了一个错误。
我的代码使用cmake编译成VS项目(我使用的是VS Express),所以QT库没有问题,而且我编写的GUI除了这部分之外也可以工作。
我有一个QComboBox cb
保存一些对象的名称,以及QLineEdit lineEdit
这允许我指定我正在寻找的对象的名称。当我按下 go 按钮时,它应该运行一个经过测试并工作的函数,并使用来自QComboBox
和lineEdit
作为参数。
以下是单击“执行”按钮时的代码:
void gui::on_go_clicked(){
std::string str(cb->currentText().toStdString());
//std::cout << str << "\n";
//QString qstr = lineEdit->text();
//std::cout<<lineEdit->text().toStdString();
updateDB(str, lineEdit->text().toStdString());
}
第一行,创建str
, 工作正常。 IE。库函数没有问题或者toStdString()
。但是当它执行我的函数时,程序中断了,这不是因为函数,而是因为它尝试转换的部分lineEdit->text().toStdString()
.
仅当我在其中写入“测试”一词时才会出现这种情况lineEdit
盒子。我已经看到其他关于 unicode 的答案,我简短地尝试过,但我可以假设用户不会在lineEdit
框,禁止 '_' 和 '.',它们不应该是 unicode。
第一行创建 str 工作正常。 IE。没问题
库函数或 toStdString()。但是当它执行我的函数时,
程序崩溃了,这不是因为函数,而是因为
它尝试将 lineEdit->text().toStdString() 转换的部分。
简化您的测试并验证 QString.toStdString() 是否符合您的预期:
所以:
QString text = "Precise text that user would input";
std::cout << text.toStdString() << std::endl; //or...
qDebug() << text.toStdString().c_str();
是否产生了预期的结果?
如果是这样的话,说明你的函数有问题。 updateDB 看起来如何(函数签名?)?它的输入是什么?
来自 Qt 帮助文件:
使用 toUtf8() 函数将 Unicode 数据转换为 8 位字符。
因此,如果您没有更改小部件(lineEdit)或其父级的区域设置,则一切应该正常工作(或者您应该看到一些信息丢失的内容)。我已经使用这个功能很多次了,没有任何问题......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)