我还看过其他几篇有关将QString转换为std::string的文章,它应该很简单。但是不知何故我出现了错误。

我的代码是使用cmake(我正在使用VS express)编译到VS项目中的,所以QT库没有问题,我编写的GUI除了这部分之外还可以工作。

我有一个QComboBox cb,可以保存某些对象的名称,还有一个QLineEdit lineEdit,可以让我指定要查找的对象的名称。当我按下go按钮时,它应该运行一个经过测试且可以正常工作的函数,并将QComboBoxlineEdit的输入作为参数。

这是单击“执行”按钮时的代码:

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框中输入“test”一词时。我已经尝试过简短地尝试过其他有关unicode的答案,但是我可以假定用户不会在lineEdit框中放入任何特殊字符,但不能将__和'。'限制为unicode。

最佳答案



简化您的测试,并验证QString.toStdString()是否达到您的期望:

所以:

QString text = "Precise text that user would input";
std::cout << text.toStdString() << std::endl; //or...
qDebug() << text.toStdString().c_str();

产生了预期的结果吗?

如果是这种情况,则意味着您的功能有问题。 updateDB的外观如何(功能签名?)?它的输入是什么?

从Qt帮助文件:



因此,如果您尚未更改小部件(lineEdit)的语言环境或其父项,则应该可以正常工作(或者您应该会看到丢失信息的地方)。我已经多次使用此功能而没有麻烦...

10-04 19:31