Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2015, 13:46   #1
andreil
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 28
По умолчанию Класс-наследник от QIODevice

Имеется класс со следующим объявлением:
Код:
class QGPKFile : public QIODevice
{
    Q_OBJECT
public:
    explicit QGPKFile(QString realname, QObject *parent = 0);
    explicit QGPKFile(GPKEntryHeader* entry_header, QString pkg, QObject *parent = 0);
    ~QGPKFile();

    qint64 read(char *data, qint64 maxlen);
    qint64 pos() { return this->posistion; }
    bool atEnd() { return (this->isPKG) ? (this->realfile.atEnd()) : (this->posistion >= entry.comprlen); }
    bool seek(qint64 offset);
    qint64 size() { return this->entry.comprlen; }

    /* ??? */
    void close();
    bool isSequential() { return false; }
    bool open(OpenMode mode) { return true; }
    bool reset() { return false; }
    qint64 bytesAvailable() { return size() - pos(); }
    qint64 bytesToWrite() { return 0; }

signals:

public slots:

private:
    QFile realfile;
    bool isPKG;
    bool compressed;
    GPKEntryHeader entry;
    qint64 posistion;


    qint64 readData(char *data, qint64 maxlen);
    qint64 writeData(const char *data, qint64 len);
};
Сам по себе он работает отлично, претензий к нему нету. Но он должен работать в связке с другим классом, где есть следующий метод:
Код:
void QScript::load_from_ORS(QIODevice *io)
{
    QTextStream stream(io);
    while (!stream.atEnd())
    {
        QString line = stream.readLine();
        if ((line.length() == 0) || (line[0] != '['))
            continue;

        this->add_action_by_ors(line.split('\t')[0].split(QRegExp("[:=\\[\\];]"), QString::SkipEmptyParts)[0],
                line.split('\t', QString::SkipEmptyParts));
    }
}
Если на вход этого метода подавать экземпляр QFile, то все нормально - работает как часы. Но при подаче экземпляра QGPKFile происходит конкретный облом - не обрабатывается ничего, связанное с ним.
Объясните нубу, как сделать правильное наследование в данном случае...

PS: Одним QFile не обойтись, поскольку требуемый файл может находиться в архиве, где файлы записаны в кучу. Разбить этот архив на части не предлагать - там очень много файлов...
andreil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задание по с++ (класс наследник) Jleks Помощь студентам 1 27.01.2013 10:22
создать класс наследник TRadioGroup с переопределенным свойством Items fate Общие вопросы Delphi 3 20.11.2012 21:40
Класс наследник JScrollPane Анатоль Общие вопросы по Java, Java SE, Kotlin 1 09.12.2011 14:58
Наследник DateTimePicker'а. Oliveyra Общие вопросы Delphi 1 05.12.2011 00:55
Не компилиться класс наследник.. coper Общие вопросы .NET 1 30.03.2010 00:39