Виталий Антипов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
- 12 листопада 2024 р. 01:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
m
- molni99
- 26 жовтня 2024 р. 11:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
m
- molni99
- 26 жовтня 2024 р. 11:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Останні коментарі
ИМ
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 листопада 2024 р. 22:51
Evgenii Legotckoi01 листопада 2024 р. 00:37
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов05 жовтня 2024 р. 17:51
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi25 червня 2024 р. 01:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 листопада 2024 р. 17:04
NSProject04 червня 2022 р. 13:49
IscanderChe01 листопада 2024 р. 01:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Ой, простите за невнимательность!
Помогло использование QVariant::fromValue()
Добрый день!