将QString转换为std::string

6

我看到了一些关于将QString转换为std::string的帖子,这应该很简单。但是不知何故我遇到了错误。

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

我有一个QComboBox cb,它保存了一些对象的名称,还有一个QLineEdit lineEdit,它允许我指定我正在寻找的对象的名称。当我按下go按钮时,它应该运行一个经过测试和工作的函数,并将QComboBoxlineEdit的输入作为参数。

以下是当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时运作正常,即库函数或toStdString()没有问题。但是当它执行我的函数时,程序崩溃了,而不是由于函数本身,而是由于尝试转换lineEdit->text().toStdString()的部分。
仅当我在lineEdit框中写入单词"test"时才会出现此问题。我看到其他答案谈论Unicode,我简要尝试了一下,但我可以假设用户不会在lineEdit框中放置任何特殊字符,除了'_'和'.',这些字符不应该是Unicode。

另外,我不知道这是否重要,但我完全忘记我是在使用QT4还是QT5。我试图让不同版本的VS、Cmake和QT一起工作时变得非常混乱(我是一名实习生,必须自己设置所有这些)。在我的cmakelists.txt中,它说FIND_PACKAGE(Qt4 REQUIRED)。实际上,我认为我所做的任何事情在QT4和QT5之间都没有区别... - Steve The Squid
好的,我不知道发生了什么。早些时候当我尝试使用 toUtf8().constData() 时,它没有起作用,而且我也不想使用它,因为我不需要 Unicode。我只是写了一个 "test"。但现在当我使用 toUtf8().constData() 时,它可以正常工作,并且到达我的函数。但是有人知道为什么我不能使用 toStdString() 吗?我宁愿保持简单。 - Steve The Squid
我假设cout语句打印了错误的字符串? - Werner Erasmus
1个回答

9

第一行创建 str 变量没有问题,这里的库函数及 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)或其父项的区域设置,则应该正常工作(或者您可能会看到一些信息丢失)。我已经多次使用此函数而没有遇到问题...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接