c++ - QString 通过引用传递问题

标签 c++ string qt parameter-passing qstring

我的代码既支持 native C++ 类型又支持 Qt 类型。例如,stringQString 是“等效的”。

我有 2 个函数,一个接受 string 的函数,另一个接受 QString 的函数。 QString 版本将参数转换为 string 的参数,然后调用该函数的 string 版本。

这是问题的一些通用代码:

int myClass::LoadQString(const QString &tagName, QString &toReturn)
{
    string tag = tagName.toStdString();
    string ret = toReturn.toStdString();
    //string& ret = toReturn.toStdString();    //This gives me an error

    return LoadString(tag, ret);
}

int myClass::LoadString(const string& tagName, string& toReturn)
{
    toReturn = "hello world!";

    ...
}

因此,这段代码将编译并运行...但是,当我调用 LoadQString() 时,第二个参数在返回后是一个空的 QString 。您可以在我的注释行中看到我尝试使用 string& ret = ... 来获取工作引用。如果我调用 LoadString(),然后在返回时检查 toReturn 的值,它将是“hello world!”正如预期的那样。

只是想让 LoadQString() 正常工作。

感谢您的帮助!

最佳答案

您应该在 std::string 版本调用后从 std::string 转换回 QString

int myClass::LoadQString(const QString &tagName, QString &toReturn)
{
    string tag = tagName.toStdString();
    string ret = toReturn.toStdString();
    int retCode = LoadString(tag, ret);
    toReturn = QString::fromStdString(ret);
    return retCode;
}

关于c++ - QString 通过引用传递问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9471111/

相关文章:

c++使用 "diamond"继承语法访问基类成员

javascript - 将经常使用的字符串定义为变量是否可以提高性能?

regex - QSyntaxHighlighter 文档中的多行注释显示不正确

c++ - 并行 OpenMP 缩减与函数定义?

c++ - 将抽象类(所有虚拟的,因此接口(interface))传递到另一个类的构造函数中并具有默认值

C++ 多线程调试宏

java - 将一个字符串分成两部分

c - 为什么 strtok 导致段错误?

c++ - 使用 QThread 时类型转换和 QThreadStorage 警告?

c++ - qt bindvalue() 无法动态绑定(bind)值