Просмотр сообщений
|
Страниц: [1] 2 3 ... 21
|
2
|
Qt / Многопоточное программирование, процессы / Re: Восстановление настроек приложения после перезапуска
|
: Апрель 22, 2020, 22:53
|
сохранить настройки на диск не ?
с сохранением на диск не понятно, как разлечить штатное отключение всего девайса, от крэша одного приложения. по отключению по-хорошему нужно удалять файл и тогда при старте, если файла нет, то это нормальный запуск, если файл есть, то восстанавливаемся из файла. но проблема в том, что я не знаю момент когда удалять файл.. с RAM в этом плане проще, после полного перезапуска - все поновой. а в случае крэша прилаги, процесс будет висеть и шаред мемори останется..
|
|
|
3
|
Qt / Многопоточное программирование, процессы / Восстановление настроек приложения после перезапуска
|
: Апрель 22, 2020, 15:31
|
Доброго дня! Как оптимальнее можно реализовать данный функционал? Приложение выполняется на девайсе под ОС VxWorks, без программной ф-ции выхода из приложения. (выключается по кнопке на девайсе). В случае крэша приложения, процесс перезапускается. Мне нужно отловить этот момент и восстановить некоторые настройки. Проще видимо заюзать RAM и для перезапуска читать данные оттуда, если там ничего нет значит эта была штатная перезагрузка. Вопрос как это реализовать.. можно заюзать QSharedMemory, но если я ее создам в том же процессе что и программа она же будет похерена при краше, да? Т.е. мне QSharedMemory нужно создавать в каком-то отдельном процессе, запускать его при старте всего девайса, и он будет жить всегда до штатного выключения. Правильно я понимаю? Или есть еще какие-то способы как реализовать механизм восстановления
|
|
|
4
|
Qt / Qt Quick / Re: Правильное удаление объектов из ++ модели связанной со списком в QML [DONE]
|
: Январь 24, 2020, 11:05
|
Eeeee вроде заработало. Всем спасибо! Eще потестирую.. но выглядит вроде все логично! Финальный вариант такой: удаление одного for(int i = 0; i < lstData.count(); ++i) { auto *data= dynamic_cast<Data*>(lstData[i]); if(data) { if(data->getNumber() == delNumber) { lstData[i]->deleteLater(); lstData.removeAt(i); delNumber = -1; context->setContextProperty("M_Data", QVariant::fromValue(lstData)); return true; } } }
удаление всех context->setContextProperty("M_Data", QVariant::fromValue(QList<QObject*>())); qDeleteAll(lstData); lstData.clear();
остался открытый теоретический вопрос нужен ли деструктор виртульным делать в дочернем классе. вроде и без него работает.. здесь его объявляют только в базовом классе http://cpp-reference.ru/articles/virtual-destructor/
|
|
|
6
|
Qt / Qt Quick / Re: Правильное удаление объектов из ++ модели k
|
: Январь 24, 2020, 09:39
|
Используйте qDeleteAll(lstData), а уже затем lstData.clear() и будет счастье.
Именно так и делаю, но счастье не приходит, когда я писал про "delete lstData.takeAt(i); для удаления одной строчки и qDeleteAll(lstData); для удаления всего" - это разные функции удаления. когда я удаляю все я делаю сначала qDeleteAll(lstData), а потом lstData.clear(). и он рандомно крашит с виртуальным конструктором, a без виртульного он крашит стабильно
|
|
|
7
|
Qt / Qt Quick / Re: Правильное удаление объектов из ++ модели ассоциированной со списком в QML
|
: Январь 24, 2020, 09:33
|
Нельзя просто так взять и удалить данные в модели не уведомив при этом вьюшки. Почитайте про: void QAbstractItemModel::beginRemoveRows(const QModelIndex &parent, int first, int last) void QAbstractItemModel::endRemoveRows()
Тоже касается и добавления данных в модель: void QAbstractItemModel::beginInsertRows(const QModelIndex &parent, int first, int last) void QAbstractItemModel::endInsertRows()
Ну и про другие случаи не забывайте, смотрите beginXXX, endXXX.
про эти методы я знаю, но где их взять если я не наследуюсь от QAbstractItemModel? по ссылке из доки, которую я привел в первом сообщении я использую QObjectList-based Model, основанную просто на QList<QObject*>. если есть такой способ, то должен быть и корректный способо удаления без begin/end методов.
|
|
|
8
|
Qt / Qt Quick / Re: Правильное удаление объектов из ++ модели ассоциированной со списком в QML
|
: Январь 23, 2020, 21:17
|
Как-то странно.. виртуальный деструктор нужен в базовом классе, для корректного удаления производных классов через указатель на базовый. Базовым классом для моего класса Data является QObject, а у него деструктор виртуальный! Поэтому вроде как все должно работать было и без добавления virtual в мой класс Data.. или что-то я не так понимаю
|
|
|
10
|
Qt / Qt Quick / Правильное удаление объектов из ++ модели ассоциированной со списком в QML
|
: Январь 23, 2020, 16:37
|
Доброго дня! Вопрос как правильно удалять данные из модели сделанной таким образом: https://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.html пример с QObjectList-based Model. В плюсовой части есть список QList<QObject*> lstData; в который добавляется структура типа class Data: public QObject { Q_OBJECT
Q_PROPERTY(...) public: Data() {}
~Data() { qDebug() << "~Data"; }
....
};
добавляется lstData.append(new Data()); после этого делается context->setContextProperty("M_Data", QVariant::fromValue(lstData)); в QML части: ListView { id: idTableBody anchors { fill: parent } clip: true model: M_Data }
и все вроде ок, когда я редактирую/добавляю данные в модель, а потом делаю обновление как написано по ссылке context->setContextProperty("M_Data", QVariant::fromValue(lstData)); интересности начинаются, когда я пытаюсь удалить данные.. чтобы удалить одну строку делаю так for(int i = 0; i < lstData.count(); ++i) { auto *data= dynamic_cast<Data*>(lstData[i]); if(data) { if(data->getNumber() == delNumberData) { lstData.removeAt(i); delNumberReason = -1; return true; } } }
для удаления всех строк вызываю просто lstData.clear() и это работает, НО.. я не вижу, чтобы вызывался деструктор объекта! removeAt(); и clear() вроде как и не должны его вызывать.. ок, тогда я делаю delete lstData.takeAt(i); для удаления одной строчки и qDeleteAll(lstData); и для удаления всего списка и при этом деструктор вызывается с....(внимание!) обязательным крашем программы! и вот собственно как это разрулить счастье, кто отвечает за освобождение памяти.. и как это правильно сделать?
|
|
|
11
|
Qt / Пользовательский интерфейс (GUI) / Re: TabBar с наполненным контентом на каждый TabBatton
|
: Октябрь 13, 2019, 14:07
|
нужно разделить создание кнопок TabBar и контента. Отдельно создаете TabBar и наполняете его кнопками TabBar { id: barTabs Component { id: compBtnTab TabButton { ..... } } }
и отдельно компонент, где будет отображаться контент, например StackLayout { id: stackPage width: parent.width; height: parent.height }
и связываете их через именение индекса по нажатию на кнопку таба onReleased: { stackPage.currentIndex = barTabs.currentIndex }
|
|
|
12
|
Qt / Qt Quick / VxWorks + QML
|
: Май 04, 2019, 10:15
|
Доброго дня! Есть ли у кого опыт написания приложений на QML (Qt 5.9.7) под ОС VxWorks 7 ?! Имеется куча странных багов отрисовки контролов, шрифтов.. хотелось бы пообщаться на тему или моей криворукости, или того, что версия 5.9.7 еще очень сырая под эту платформу (вышла относительно недавно)!
|
|
|
14
|
Qt / Qt Quick / Редактировать XmlListModel
|
: Ноябрь 23, 2018, 16:47
|
Есть модель вида: XmlListModel { id: xmlDataTableModel query: "/data/raw"
XmlRole { name: "idUser"; query: "id/string()"; } XmlRole { name: "numbUser"; query: "number/string()"; } XmlRole { name: "userState"; query: "state/string()"; } }
Могу ли я как-то отредактировать скажем поле userState? Пробовал через xmlDataTableModel.get(index).userState = "true". Ничего не происходит.. Qt 5.5.1
|
|
|
|
|