【问题标题】:QString& QString::operator=(const QByteArray&)' is privateQString& QString::operator=(const QByteArray&)' 是私有的
【发布时间】:2017-08-04 11:29:05
【问题描述】:

我正在尝试将 QProcess 的标准输出读取为 QString,其中传递的参数是 linux 命令。 linux 命令给了我 linux 用户名。当我将参数传递给 QProcess 时,我希望输出是我的 linux 用户名。在这样做时,我必须读取标准输出并得到QString 的结果,但我得到了错误:

QString& QString::operator=(const QByteArray&)' is private.

我的代码:

QProcess process;
process.start(QString::fromStdString("whoami"));
process.waitForFinished(-1); // will wait forever until finished
QByteArray name = process.readAllStandardOutput();
QString username = name;  //Error here saying 

【问题讨论】:

  • 这很奇怪,this referenceoperator=(const QByteArray&) 函数是公开的。你正在做一些你现在向我们展示的事情吗?您能创建一个Minimal, Complete, and Verifiable Example 并展示给我们看吗?
  • 另外,您向我们展示的错误实际上与您向我们展示的代码不匹配。对于QString username = name,应该使用public constructorQString,而不是赋值运算符。再次,请向我们展示MCVE 和实际错误(完整、完整且未经修改)。
  • username 是在 .h 文件中声明为静态 QString 用户名的类变量。在上面的代码中: - username = name 被使用。因此调用了赋值运算符。
  • 那么请编辑您的问题,向我们展示Minimal, Complete, and Verifiable Example。不要只是编写代码。当您编辑问题时,在将 MCVE 构建到问题正文中时,复制粘贴(作为文本)完整输出。

标签: c++ qt


【解决方案1】:
QProcess process;
process.start(QString::fromStdString("whoami"));
process.waitForFinished(-1); // this could be omitted
QTextStream txtStream(&process);
QString username = txtStream.readLine();

注意QTextStream 默认使用首选的默认语言环境字符串编码。您可以使用QTextStream::setCodec 更改字符串编码(UTF-8、Windows-1250、UCS 或任何您需要的,系统区域设置的默认编解码器通常是最佳选择)。 它还允许您以流式方式处理数据,这总是很好的。

【讨论】:

  • 你应该解释你的代码有什么不同以及为什么。否则,读者必须发挥作用。
  • 我的所有示例都首先符合:P.
  • 为我工作。谢谢:)
  • @Marek R 。如果 QProcess 失败并给出标准错误怎么办。它也适用于这种情况吗?如果是这样,它会将错误文本分配给用户名,不是吗?
【解决方案2】:

只需这样做:

QByteArray name = process.readAllStandardOutput();
QString username = QString::fromRawData(name.data(), name.size()); 

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 2018-12-22
    • 2013-12-25
    • 2016-11-27
    • 2017-12-12
    • 2016-10-14
    • 2012-07-02
    • 2017-11-04
    相关资源
    最近更新 更多