【发布时间】:2013-08-21 12:34:27
【问题描述】:
我看过其他几篇关于将 QString 转换为 std::string 的帖子,应该很简单。但不知何故,我遇到了一个错误。
我的代码是使用 cmake 编译成 VS 项目的(我使用的是 VS express),所以 QT 库没有问题,我编写的 GUI 除了这部分之外也可以工作。
我有一个 QComboBox cb 保存一些对象的名称,还有一个 QLineEdit lineEdit 允许我指定我正在寻找的对象的名称。当我按下 go 按钮时,它应该运行一个经过测试并可以工作的函数,并将来自 QComboBox 和 lineEdit 的输入作为参数。
这是单击“开始”按钮时的代码:
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 框中放置任何特殊字符,除非是 '_' 和 '.',这不应该是统一码。
【问题讨论】:
-
另外,我不知道这是否重要,但我完全忘记了我使用的是 QT4 还是 QT5。我在试图让不同版本的 VS、Cmake 和 QT 一起工作时陷入了绝望的境地(我是一名实习生,必须自己设置所有这些)。在我的 cmakelists.txt 中,它写着
FIND_PACKAGE(Qt4 REQUIRED)。实际上,我认为 QT4 和 QT5 之间我所做的任何事情都没有什么不同...... -
好吧,我不知道发生了什么。早些时候,当我尝试
toUtf8().constData()时,它不起作用,我不想使用它,因为我不需要 unicode。我只是在写“测试”。但是现在当我使用toUtf8().constData()时,它可以正常工作,并且可以使用我的功能。但是有谁知道为什么我不能使用toStdString()?我宁愿保持简单。 -
我假设 cout 语句打印了错误的字符串?