我已经看过其他几篇关于将QString转换为std :: string的帖子,它应该很简单。但不知怎的,我收到了一个错误。
我的代码使用cmake编译成VS项目(我正在使用VS express),因此QT库没有问题,我编写的GUI除此部分外还有用。
我有一个QComboBox cb
来保存某些对象的名称,还有一个QLineEdit lineEdit
,它允许我指定我要查找的对象的名称。当我按下一个go按钮时,它应该运行一个经过测试和工作的函数,并输入QComboBox
和lineEdit
作为参数。
以下是点击go按钮时的代码:
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
,效果很好。 I.E.库函数或toStdString()
没有问题。但是当它执行我的函数时,程序会中断,并且它不是因为函数,而是因为它尝试转换lineEdit->text().toStdString()
的部分。
仅当我在lineEdit
框中写下“test”时才会这样。我已经看到了其他关于unicode的答案,我曾经简要地尝试过,但是我可以假设用户不会在lineEdit
框中添加任何特殊字符,除非是'_'和'。',这应该是'是unicode。
答案 0 :(得分:9)
创建str的第一行工作正常。 I.E.这没问题 库函数或toStdString()。但是当它执行我的功能时, 程序中断了,这不是因为这个功能,而是因为 尝试转换lineEdit-&gt; 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)或它的父窗口,那么事情应该正常工作(或者您应该看到信息丢失的内容)。我已经多次使用过这个功能而没有麻烦...