Виталий Антипов23. März 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
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.Magst du es? In sozialen Netzwerken teilen!
Kommentare
sf
- sdfsdfkp fgskpgokspdog
- 14. Oktober 2024 15:09
C++ - Тест 004. Указатели, Массивы и Циклы
- Ergebnis:90punkte,
- Bewertungspunkte8
МВ
- Максим Васильев
- 2. Oktober 2024 04:14
Qt - Тест 001. Сигналы и слоты
- Ergebnis:68punkte,
- Bewertungspunkte-1
ЛС
- Лев Семенов
- 30. September 2024 11:04
C++ - Тест 001. Первая программа и типы данных
- Ergebnis:53punkte,
- Bewertungspunkte-4
Letzte Kommentare
ИМ
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов5. Oktober 2024 07:51
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5. Februar 2024 01:50
EVA25. Dezember 2023 10:30
Jetzt im Forum diskutieren
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов3. Oktober 2024 04:05
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
Кирилл Гусарев27. September 2024 09:09
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
Ой, простите за невнимательность!
Помогло использование QVariant::fromValue()
Добрый день!