6

我看过其他几篇关于将 QString 转换为 std::string 的帖子,应该很简单。但不知何故,我得到了一个错误。

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

我有一个QComboBox cb包含某些对象的名称的 a,以及一个QLineEdit lineEdit允许我指定我正在寻找的对象的名称的 a。当我按下 go 按钮时,它应该运行一个经过测试和工作的函数,并使用来自 theQComboBox和 the的输入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,工作正常。IE 库函数或toStdString(). 但是当它执行我的函数时,程序中断了,这不是因为函数,而是因为它试图转换的部分lineEdit->text().toStdString()

lineEdit只有当我在框中写下“测试”一词时。我已经看到其他关于 unicode 的答案,我简要地尝试过,但我可以假设用户不会在lineEdit框中放置任何特殊字符,除非 '_' 和 '.',这不应该是 unicode。

4

1 回答 1

9

第一行,创建 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) 或其父级的区域设置,那么一切都应该正常工作(或者您应该看到一些信息丢失的内容)。我已经多次使用这个功能没有麻烦......

于 2013-08-25T20:57:52.207 回答