实现QIODevice驱动的类

时间:2018-06-18 15:31:46

标签: c++ qt c++11

我正在尝试实现从QIODevice继承的类。

QT文档说: Subclasses of QIODevice are only required to implement the protected readData() and writeData() functions

我尝试创建一个基本的虚拟类,除了打印函数之外没有其他功能,这里是代码:

class dummyClass : public QIODevice
{
    Q_OBJECT
    Q_DISABLE_COPY(dummyClass)

public:
    explicit dummyClass( QObject *parent = 0): QIODevice(parent)
    {
        qDebug() << __FUNCTION__ <<endl;
    }

protected:
    qint64 readData(char *data, qint64 len)
    {
        qDebug() << __FUNCTION__ <<endl;
        return 0;
    }

    qint64 writeData(const char *data, qint64 maxSize)
    {
        qDebug() << __FUNCTION__ <<endl;
        return 0;
    }

};

这是检查类的代码:

dummyClass try_file;
try_file.write("hello to all the good people");
try_file.close();

当我运行代码时,我得到以下输出:

dummyClass ::dummyClass 
QIODevice::write (a): device not open

换句话说,发生的是该类转向原始的WRITE函数,而不是像文档所说的那样将调用重定向到writeData,而是执行阻碍写入的操作。

谁能告诉我我的错误在哪里? (假设我不想自己在QIODevice类中实现所有的READ和WRITE函数)

1 个答案:

答案 0 :(得分:0)

如果其他人遇到此问题,QIODevice会在将会话转发到可读写WRITE函数之前检查访问权限。 因此,在打开文件的过程中,您必须将对象的setOpenMode设置为所需的状态,否则它将引发您的阅读和写作。