Russian Qt Forum
Май 08, 2024, 11:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt5 не загружаются данные из потока QDataStream в ushort  (Прочитано 2382 раз)
xwicked
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« : Декабрь 23, 2020, 15:44 »

Привет всем! Переношу программу из Qt4 в Qt5. Из потока QDataStream загружает не все данные.
Код
C++ (Qt)
       file.setFileName(tfCross->fileName());
       QDataStream sfile(&file);
       ushort idata;
       int IntCount;
       QString sappVersion;
 
       sfile >> sappVersion;
       sfile >> IntCount;
       setRowCount(IntCount);
       sfile >> IntCount;
       setColumnCount(IntCount);
       sfile >> IntCount;
       sfile >> TableFont;
       setFont(TableFont);
 
       gKlest->setRowCount(rowCount());
       gKlest->setColumnCount(columnCount());
       gKlest->create();
 
       for (int i = 0; i < rowCount(); i++)
           for (int j = 0; j < columnCount(); j++)
           {
               //Создание ячеек сетки
               CellCrossword = new QTableWidgetItem;
               setItem(i,j,CellCrossword);
               setRowHeight(i,IntCount);
               setColumnWidth(j,IntCount);
--------------------------
               sfile >> idata; //сюда загружается 0. Вместо 84 или 67(например)
--------------------------
               idata -= 1;
 
               if(QChar(idata) == 'b')
                   item(i,j)->setBackground(BrushBlack);
               else
                   item(i,j)->setBackground(BrushWhite);
           }
В idata должно загружаться 2 байта для преобразования в QChar. Файл в hex-редакторе открыл - там все данные на месте. Они в потоках что-то изменили?
« Последнее редактирование: Декабрь 23, 2020, 15:53 от xwicked » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #1 : Декабрь 23, 2020, 16:56 »

а остальные данные правильно читаются? отладчиком смотрел хотя бы? на каком шаге цикла не читается? может там надо указать версию Qt для QDataStream? к тому же, без файла с данными трудно понять ошибка в твоем коде или нет.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
xwicked
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #2 : Декабрь 23, 2020, 17:11 »

а остальные данные правильно читаются? отладчиком смотрел хотя бы? на каком шаге цикла не читается? может там надо указать версию Qt для QDataStream? к тому же, без файла с данными трудно понять ошибка в твоем коде или нет.
Хотя да, он потом и остальные не читает. Получается сбивается именно в этом месте и дальше ничего не читается. Проверю или укажу версию QDataStream  и отпишусь вечером.
В коде ошибок быть не может, код 100 раз отлажен с 2009г, просто перевожу версию Qt.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #3 : Декабрь 23, 2020, 17:22 »

какие-то изменения точно были. Например, мне пришлось сделать такую модификацию для Qt 5: https://github.com/kambala-decapitator/QTblEditor/commit/bd9798093bc8345c41280b81b586d12f7ff3bb45 (к твоему случаю не относится, насколько я вижу)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #4 : Декабрь 23, 2020, 17:25 »

Код:
void QDataStream::setVersion(QDataStream::Qt_4_0)
Пробовали? Ну и поиграться с версиями
Записан
xwicked
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #5 : Декабрь 24, 2020, 01:19 »

Код
C++ (Qt)
   QDataStream sfile(&file);
   sfile.setVersion(QDataStream::Qt_4_8);
Вопрос зарыт. Благодарю!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.088 секунд. Запросов: 22.