Виталий Антипов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 хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD
- Akiv Doros
- 11 ноября 2024 г. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
m
- molni99
- 26 октября 2024 г. 1:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
m
- molni99
- 26 октября 2024 г. 1:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Последние комментарии
ИМ
Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 ноября 2024 г. 11:51
Evgenii Legotckoi31 октября 2024 г. 14:37
Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов5 октября 2024 г. 7:51
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Сейчас обсуждают на форуме
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii Legotckoi24 июня 2024 г. 15:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 ноября 2024 г. 6:04
NSProject4 июня 2022 г. 3:49
IscanderChe31 октября 2024 г. 15:43
Ой, простите за невнимательность!
Помогло использование QVariant::fromValue()
Добрый день!