【问题标题】:Converting QString to std::string将 QString 转换为 std::string
【发布时间】:2013-08-21 12:34:27
【问题描述】:

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

我的代码是使用 cmake 编译成 VS 项目的(我使用的是 VS express),所以 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-&gt;text().toStdString()的部分。

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

【问题讨论】:

  • 另外,我不知道这是否重要,但我完全忘记了我使用的是 QT4 还是 QT5。我在试图让不同版本的 VS、Cmake 和 QT 一起工作时陷入了绝望的境地(我是一名实习生,必须自己设置所有这些)。在我的 cmakelists.txt 中,它写着 FIND_PACKAGE(Qt4 REQUIRED)。实际上,我认为 QT4 和 QT5 之间我所做的任何事情都没有什么不同......
  • 好吧,我不知道发生了什么。早些时候,当我尝试toUtf8().constData() 时,它不起作用,我不想使用它,因为我不需要 unicode。我只是在写“测试”。但是现在当我使用toUtf8().constData() 时,它可以正常工作,并且可以使用我的功能。但是有谁知道为什么我不能使用toStdString()?我宁愿保持简单。
  • 我假设 cout 语句打印了错误的字符串?

标签: c++ qt stdstring qstring


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 2013-05-11
    • 2011-05-11
    • 2014-09-08
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    相关资源
    最近更新 更多