• 6408阅读
  • 7回复

[提问]怎么写一个QByteArray的子类?有例子么 [复制链接]

上一主题 下一主题
离线vbroot
 

只看楼主 倒序阅读 楼主  发表于: 2014-05-07
如题
我要继承与QByteArray,然后再给这个类多加几个方法。
可是不会写了。


离线ashe0817

只看该作者 1楼 发表于: 2014-05-07
class MyByteArray : public QByteArray
{
Q_OBJECT
public:
    QString hello() { return "hello"; }
}
离线vbroot

只看该作者 2楼 发表于: 2014-05-07
LByteArray l=QByteArray::fromHex("06 07 08 09");

提示“初始化”: 无法从“QByteArray”转换为“LByteArray”
无构造函数可以接受源类型,或构造函数重载决策不明确

LByteArray l=LByteArray::fromHex("06 07 08 09"); 这样也报错。

LByteArray l=(LByteArray)QByteArray::fromHex("06 07 08 09"); 这样也不行。
代码很简单



  1. #include <QByteArray>
  2. class LByteArray : public QByteArray
  3. {
  4. public:
  5. LByteArray();
  6. qint32 readInt();
  7. qint32 index;
  8. };


  1. qint32 LByteArray::readInt()
  2. {
  3.     QByteArray bytes;
  4.     bytes=mid(index,4);
  5.     int addr = bytes[0] & 0x000000FF;
  6.     addr |= ((bytes[1] << 8) & 0x0000FF00);
  7.     addr |= ((bytes[2] << 16) & 0x00FF0000);
  8.     addr |= ((bytes[3] << 24) & 0xFF000000);
  9.     return addr;}



离线dbzhang800

只看该作者 3楼 发表于: 2014-05-07
楼主需要补充一些C++的基础知识。Qt是C++的库,没有C++的底子你会走太多弯路的
离线dwhome

只看该作者 4楼 发表于: 2014-05-07
回 vbroot 的帖子
vbroot:LByteArray l=QByteArray::fromHex("06 07 08 09");
提示“初始化”: 无法从“QByteArray”转换为“LByteArray”
无构造函数可以接受源类型,或构造函数重载决策不明确
....... (2014-05-07 15:36) 

操作符=的问题
可以换一种方式,比如append()试试
离线vbroot

只看该作者 5楼 发表于: 2014-05-07
用append 是可以的但是readint 读不到数据。

3.    QByteArray bytes;
4.    bytes=mid(index,4);   //这里读不到数据

QByteArray  太复杂了搞不太懂啊
离线dbzhang800

只看该作者 6楼 发表于: 2014-05-07
QByteArray 自身复杂不复杂,和你的问题关系不大。现在的问题是,你定义了一个新类 LByteArray,而后你想使得它可以和QByteArray进行 == 或 != 等操作。

但是你没有为你的 LByteArray 定义任何 == 或 != 操作符;也没有定义任何转换操作符,使得你的LByteArray可以自动转换成可以和QByteArray进行比较的类型。

而这些东西,你需要去C++的教材中找答案。
离线vbroot

只看该作者 7楼 发表于: 2014-05-09
谢谢,各位的指导。

改了下思路
  1. //LByteArray.cpp
  2. void LByteArray::fromHex(const QByteArray &hexEncoded)
  3. {
  4.     append(QByteArray::fromHex(hexEncoded));
  5. }
  6. // 调用如下:
  7.    LByteArray l;
  8.     l.fromHex("01 02 2a 02 03 0d 0d");
  9.     qDebug()<<l.toHex();
  10. //这样就可以了,呵呵。


快速回复
限100 字节
 
上一个 下一个