c++ - QString 在传递给函数时清空

标签 c++ qt ubuntu qstring

我有一个用 QT 编写的项目。 到目前为止,我在 Windows 中测试它没有问题。 今天尝试移植到Linux上

我从 qt.gitorius.org 下载了 Qt 源代码树。现在它有 5.2.2 版。 它编译和安装没有问题。 程序也编译没有问题。 但是运行的时候出现了问题。 在调试时我发现了奇怪的行为。 很快在代码中:

Config::Config()
{
    p_path = QApplication::applicationDirPath();
    if(!p_path.endsWith(QDir::separator())) p_path += QDir::separator();
    QString path = p_path + "Settings/config.xml";
    settings = new Settings(path,this); // here path is /opt/myprog/Settings/config.xml
}
Settings::Settings(const QString file, QObject * parent) : QObject(parent)
{
    p_file = file; // file is empty here!!!!   
    p_initialized = false;
    p_autosave = true;
    p_changed = false;

}

当我将 QString 值传递给函数时,它会丢失其值。

我在 Windows 中检查了相同的代码,它没有问题。

我的系统:

  • 优宾图 13.10 64 位
  • 海湾合作委员会 4.8.1
  • Qt 5.2.2 (git)

最佳答案

您显示的代码没有什么严重错误,只是您想将 const reference 传递给字符串,但这不是问题的原因。 Settings 构造函数应具有以下签名:

Settings::Settings(const QString & file, QObject * parent)

你应该在项目上重新运行 qmake,清理并重建它,然后再试一次。如果它仍然不起作用,那么你有一个内存错误,平台的变化只会暴露你代码中的一个潜在错误。

关于c++ - QString 在传递给函数时清空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21567612/

相关文章:

c++ - 可以在 .pro 文件中包含 C/C++ 头文件吗?

linux - 如何使用 AWK 从网络日志中收集 IP 和用户代理信息?

c++ - 在 C++ 中抑制系统 ("ping") 输出

c++ - 将 std vector 重新分配给默认构造函数 vector 是删除的好方法吗?

QT + OpenCV 未定义对 cv::stereoBM::create(int,int) 的引用

c++ - Qt 4.7 - glTexSubImage2D 返回 GL_INVALID_OPERATION

ipad - 我可以在 Ubuntu 上通过 SSH 运行 Sublime Text 2 吗?

linux - Ubuntu 16.04 'gsl' 依赖冲突

c++ - 运算符 != 对于 std::reverse_iterator c++ 是不明确的

c++ - 使成员变量受到保护是一种好习惯吗?