Виталий Антипов23 марта 2018 г. 10:24
Чтение бинарного файла и вывод в QML
Добрый день! Решил изучить работу с бинарными файлами. Есть прибор, который результаты преобразования сигналов записывает в бинарные файлы. С помощью hex-редактора практически разобрался со структурой записей. Для начала решил поиграться с чтением количества и времени измерений по конкретной дате с выводом в QML ListView.
main.cpp
#include <QGuiApplication> #include <QApplication> #include <QQmlApplicationEngine> #include <QQmlContext> #include <datearrays.h> int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); QObject *root = engine.rootObjects().first(); Datearrays *datar = new Datearrays(); QObject::connect(root, SIGNAL(qmlLoadArrays()), datar, SLOT(load())); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); }datearrays.h
#ifndef DATEARRAYS_H #define DATEARRAYS_H #include <QObject> #include <QDebug> #include <QDataStream> #include <QFile> class Datearrays : public QObject { Q_OBJECT public: explicit Datearrays(QObject *parent = 0); ~Datearrays(); int k = 0; //счетчик количества найденных измерений по дате QVector<int> list; //массив с данными времени измерений по дате public slots: void load(); //функция чтения бинарного файла с отправкой данных в QML }; #endif // DATEARRAYS_Hdatearrays.cpp
#include "datearrays.h" Datearrays::Datearrays(QObject *parent) : QObject(parent) { } Datearrays::~Datearrays() { } void Datearrays::load() { QObject* l = this->parent()->findChild<QObject*>("list"); QFile file("ARRAYS.DAT"); file.open(QIODevice::ReadOnly); int razmer = 0; razmer = file.size(); //размер файла в байтах QDataStream in(&file); //в бинарном файле дата и время измерений записаны как символы размером 1 байт, //в переводе в десятичную систему 4 3 18 0 5 16 47, что соответствует 04/03/2018 05:16:47 unsigned char *int1 = new unsigned char[razmer]; //первый символ дата/время unsigned char *int2 = new unsigned char[razmer]; //второй символ дата/время unsigned char *int3 = new unsigned char[razmer]; //третий символ дата/время unsigned char *int4 = new unsigned char[razmer]; //четвертый символ дата/время unsigned char *int5 = new unsigned char[razmer]; //пятый символ дата/время unsigned char *int6 = new unsigned char[razmer]; //шестой символ дата/время unsigned char b; //какой-то не интересный символ, будет им читать, но не сохранять while (!in.atEnd()){ //ищем дату 04/03/2018 in >> int1[k]; //читаем в первый символ все подряд, пока он не станет '4' if(int1[k]==4){ in >> int2[k]; //в таком случае читаем во второй символ, пока он не станет '3' if(int2[k]==3){ in >> int3[k]; //продолжаем с третьим символом, пока он не станет '18' if(int3[k]==18){ //нашли искомую дату!!! in >> b; //пропускаем символ '0' и записываем символы времени in >> int4[k]; //часы in >> int5[k]; //минуты in >> int6[k]; //секунлы qDebug()<<k<<" "<<int1[k]<<"-"<<int2[k]<<"-"<<int3[k]<<" "<<int4[k]<<":"<<int5[k]<<":"<<int6[k]; //все отлично в консоли list<<int4[k]; //пробуем записать часы в вектор qDebug()<<list[k]; //записывается отлично k++; } } } } k = k-1; qDebug()<<"k"<<k; //счетчик на месте //а теперь надо полученные данные вывести в QML //l->setProperty("rows", k); //приложение падает SIGSEGV segmentation fault //l->setProperty("array", list); //no matching function for call to 'QObject::setProperty(const char [6], QVector<int>&)' }Вот такой облом :( Алгоритм работает до команды вывода в QML. С QVariantList то же самое. Но самое обидное что обычный int не могу передать. Подскажите, в чем может быть проблема?
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
B
- Bogdannn
- 28 марта 2024 г. 2:15
C++ - Тест 001. Первая программа и типы данных
- Результат:46баллов,
- Очки рейтинга-6
Последние комментарии
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5 февраля 2024 г. 9:50
EVA25 декабря 2023 г. 18:30
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев14 апреля 2024 г. 9:35
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
Как получить в массив значения из связанной модели? Спасибо, разобрался:))
AC
QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…
Alexandru Codreanu19 января 2024 г. 19:57
Ой, простите за невнимательность!
Помогло использование QVariant::fromValue()
Добрый день!