【问题标题】:QByteArray and its normal c++ equivalent [closed]QByteArray 及其正常的 c++ 等效项 [关闭]
【发布时间】:2018-10-10 22:34:52
【问题描述】:

我以前有一个用 QT 编写的代码。生成的输出非常慢。 我对 QT 有非常基本的了解。 我想知道QByteArray 对象和QChar 与普通c++ 等效。

Qt 中的Datapackage 类。

class Datapackage
{
public:
    Datapackage(QByteArray datas,int start);
    QVector<double> getX() const;
    QVector<double> getY() const;

private:
    QVector<QChar> intensity;
    QVector<double>x;
    QVector<double>y;
    qint8 header[288];
};

我尝试过的普通 c++ Datapackage

class Datapackage
{
public:
    Datapackage( std::vector<char> datas , int start );
    std::vector<double> getX() const;
    std::vector<double> getY() const;

private:
    std::vector<char> intensity;
    std::vector<double> x;
    std::vector<double> y;
   int8_t header[288];

};

我的结果很荒谬。我做错了转换。 能不能推荐一个好方法。上面的类不是完整的代码。我删除了一些数据,以免代码太长。

【问题讨论】:

  • 请扩大“荒谬”
  • @Launa :给我们代码示例。库的正确拼写是 Qt, QT - Quick Time
  • 我们需要一个代码示例。你在谈论一个数组,然后告诉我一个浮点数?你执行哪一行代码,你期望什么输出,你会得到什么?
  • 你已经把车放在你的马前面了。你毫无根据地假设QByteArray是你的问题。很可能不是,您做错了什么,在您向我们展示代码之前我们不会知道。
  • 将代码编辑到您的问题中,将代码添加到 cmets 使其不可读。

标签: c++ qt


【解决方案1】:

QChar 不是char

QByteArray 不是std::vector&lt;char&gt;

QChar 更像wchar_t,尽管它是一个类并且提供的功能不仅仅是存储字符。不要忘记QChar 存储一个 UTF-16 代码单元。一些 Unicode 代码点 存储为两个 UTF-16 代码单元(称为代理对)。所以你永远不应该假设一个QChar 代表一个完整的代码点。同样,您永远不应该假设一个代码点代表一个字符。一些字符由多个代码点表示。一般来说:

number of printable characters &lt;= number of code points &lt;= number of code units (QChars)

QByteArray 提供的功能超出了std::vector 的功能,即可与QDataStream 等一起使用。

我以前有一个用 QT 编写的代码。生成的输出很慢。

您的问题是您没有向我们展示任何代码,并且您在不了解问题所在的情况下预设了解决方案。您已经决定 std::vector 将是一个解决方案,但您真的不知道问题出在哪里。

我们需要查看重现问题的minimal 示例,并且只有这样才能确定QByteArray 本身是罪魁祸首,还是(更有可能)错误的方式你已经设计了你的解决方案。

【讨论】:

  • 我已经声明我做错了转换。 QChar 显然不是字符。我认为 char 可以通过某种方式替换它。观察我的代码的输出。我知道这不是一个合适的转换。 QByteArray 具有 Qt 文档中所见的许多功能。这只是一次尝试,一次错误的尝试。由于代码太长,我无法显示最小示例。
【解决方案2】:

如果您尝试将代码中的所有QByteArrays 实例更改为std::vectors 和QChars 为字符,那么您将不得不向我们提供一些您遇到的错误让我们为您提供帮助。

但是,如果您想转换为向量/字符,然后对它们进行计算,那么您可以使用这些:

std::vector<unsigned char> newVector(
oldByteArray.begin(), oldByteArray.end());

myChar = oldQChar.toAscii();
or
myChar = oldQChar.toLatin1();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多