Почему я не могу повторно реализовать метод QIODevice, если базовым классом является QFile?

когда мой базовый класс - QIODevice, я могу повторно реализовать writeData и readData, но если базовым классом является QFile, это не работает. Базовым классом OFile является QFileDevice, а базовым классом QFileDevice является QIODevice:

//This works:
//class xyseriesiodevice : public QIODevice

//This doesn't work
class xyseriesiodevice : public QFile
{
    Q_OBJECT
public:
    explicit xyseriesiodevice(QXYSeries * series, QObject *parent = 0);

protected:
    qint64 readData(char * data, qint64 maxSize);
    qint64 writeData(const char * data, qint64 maxSize);

При звонке

//m_device is of type xyseriesiodevice
//m_audioInput is of type QAudioInput    
m_device->open(QIODevice::WriteOnly);
m_audioInput->start(m_device);

writeData из xyseriesiodevice вызывается только тогда, когда базовым классом являетсяQIODevice

Спасибо!!


person davidReward    schedule 08.04.2018    source источник
comment
Он должен работать. Вы проверили результат вызова open()? Если открыть не удается, возможно, QAudioOutput не будет вызывать writeData().   -  person Aurélien Gâteau    schedule 09.04.2018
comment
FWIW Я попытался изменить пример программы QT (в qtmultimedia/examples/multimedia/audioinput) так, чтобы его AudioInfo подкласс класса QFile, а не QIODevice, и после этого (и после изменения метода AudioInfo :: start () для вызова open (stdout, QIODevice :: WriteOnly) ), Я вижу, что AudioInfo :: writeData () вызывается через регулярные промежутки времени с 4096-байтовыми фрагментами аудиоданных. Это под MacOS / X с Qt 5.10.0.   -  person Jeremy Friesner    schedule 09.04.2018


Ответы (1)


Если вы не включили библиотеку QFile, попробуйте включить ее. Попробуйте также добавить ключевое слово override после сигнатуры метода.

qint64 readData(char * data, qint64 maxSize) override;
qint64 writeData(const char * data, qint64 maxSize) override;
person R. Mereu    schedule 09.04.2018
comment
Код не скомпилируется, если QFile не объявлен - это рекомендация культа карго. override - правильная рекомендация. - person Kuba hasn't forgotten Monica; 09.04.2018