实现 QIODevice 驱动的类

Implement QIODevice driven class

本文关键字:QIODevice 实现      更新时间:2023-10-16

我正在尝试实现一个从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函数(

如果其他人遇到这种情况,QIODevice 会在将会话向前移动到可读和可写的 WRITE 函数之前检查访问权限。 因此,在打开文件的过程中,您必须将对象的OpenMode设置为所需的状态,否则它将使您陷入读写状态。