|
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 97
|
|||||||||||||||||||||
Сохранение / загрузка виджета30.08.2025, 22:38. Показов 2457. Ответов 35
Метки restorestate / savestate (Все метки)
вот так загружаю сейв виджета:
вот так дано в мануале:
0
|
|||||||||||||||||||||
| 30.08.2025, 22:38 | |
|
Ответы с готовыми решениями:
35
Как навести мышку на x,y внутри виджета относительно 0,0 виджета (левого верхнего угла виджета)? Вызов одного виджета из другого виджета
|
|
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
|
|||
| 31.08.2025, 14:15 | |||
|
(И сохраняешь каждый раз при добавлении нового лейбла в цикле, хотя можно сделать это один раз после всех модификаций окна).
0
|
|||
|
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 97
|
|
| 31.08.2025, 14:26 [ТС] | |
|
Да сохранять хочу после каждого изменения. Вы можете хотя бы теорию объяснить. Мне нужно сохранять каждый label отдельно? Текст label тоже отдельно? Если да тогда как мне узнать название их потому как они создаются программно с именами по умолчанию я так полагаю
0
|
|
|
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
|
|||||||||||
| 31.08.2025, 15:10 | |||||||||||
|
Делал когда-то, сейчас может сделал бы немного по-другому. Боюсь, тебе сложновато будет разобраться.
Смысл тут такой: Кликните здесь для просмотра всего текста
- есть хранилище свойств QMap<QString, QList<widgetProperty>> contentData; где ключь - это objectName() виджета (который должен быть обязательно задан виджетам, данные которых надо сохранить), а значение -это структура с именем и значением свойства (хотя можно было бы только имя хранить и получать значение через property()) - свойства записываются в хранилище по сигналам от виджета (а не проходом по всем виджетам в нужный момент например-так как виджет может уже перестать существовать. Снова же, QMetaProperty/Object/Type предоставляет кучу данных, включая сигнал, изменяющий свойство-так что есть простор для творчества) - при закрытии приложения срабатывает void closeEvent() и void saveSettings(); в нем, где данные из хранилища пишутся в человекочитаемый файл с помощью QSettings (а можно просто в бинарник запихать) -при запуске приложения вызывается readSettings(); где итерирумся по файлу QSetings, получая objectName виджета, имя и значение свойства. Если найден виджет с таким именем, через QMetaObject настраиваем свойство (тут я не делал проверок на isReadable, isWritable свойств- хотя стоило бы) листинг Кликните здесь для просмотра всего текста
mainwindow.h
0
|
|||||||||||
|
Заблокирован
|
|
| 31.08.2025, 15:25 | |
|
Я вопроса не увидел в шапке, поэтому просто прошел мимо.
О чем вы? Можно увидеть четкую постановку задачи?
0
|
|
|
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
|
||
| 31.08.2025, 15:39 | ||
|
зы увидел ошибку в 68 строчке, continue вместо reeturn. Может и еще есть, давно мутил.
0
|
||
|
Заблокирован
|
||
| 31.08.2025, 16:04 | ||
|
Собрать коллекцию указателей виджетов на форме. Сохранить состояния. Загрузка так же. Собираем коллекцию указателей виджетов на форме. Если есть виджет с таким именем, загружаем. Я бы даже сделал рекурсивно. Но я думаю всё же лучше узнать от ТС. А то что то не похоже. Добавлено через 3 минуты p.s. Это даже хорошо, что заранее создали таку себе сериализацию, радует)
0
|
||
|
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
|
|||||||||||||
| 31.08.2025, 17:02 | |||||||||||||
![]() Ну пусть ТС уточняет, в любом случае можно переделать под свои понятия. Добавлено через 53 минуты settings->setValue("TextOfMyLabel", myLabel->text()); и читать QString txt=settings->value("TextOfMyLabel").toString(); myLabel->setText(txt); и Кликните здесь для просмотра всего текста
Вот это
0
|
|||||||||||||
|
фрилансер
6437 / 5632 / 1126
Регистрация: 11.10.2019
Сообщений: 14,971
|
|
| 31.08.2025, 17:12 | |
|
1
|
|
|
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 97
|
|||||||||||||||||||||
| 01.09.2025, 21:22 [ТС] | |||||||||||||||||||||
|
сложность вот в чем.
Добавлено через 2 минуты извинюсь что долго не отвечаю на работе дурдом какой то начался Добавлено через 9 минут так, нужно создавать label с именем из массива
может так?:
0
|
|||||||||||||||||||||
|
Заблокирован
|
|||
| 01.09.2025, 22:39 | |||
|
Вы хоть смотрели что вы сохраняете? widget.objectName()
0
|
|||
|
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
|
|
| 01.09.2025, 22:46 | |
Сообщение было отмечено MVDmitrii как решение
Решение
MVDmitrii, сохранить в файл можно данные (из виджета), а сам виджет-нельзя.
Так и не обьяснил, зачем эти сохранения. Смотри документацию по QSettings. Например, там можно группировать данные: Кликните здесь для просмотра всего текста
QSettings s; так: s.setValue("имя группы/имя поля", value); или так: s.beginGroup("имя группы"); s.setValue("имя поля", value); s.endGroup(); и получится запись в файле: [имя группы] имя поля = value Это можно использовать для сохранения текста на лейбле, например: s.setValue("labelSECNAME/text", labelSECNAME->text()); Если планируется устанавливать данные в виджеты из файла при запуске проги, то надо: -либо знать, в какой именно виджет устанавливать значение. Это возможно, если дать виджету внутреннее имя setObjectName(), как сделано в моем примере. -либо сначала читать данные с файла в какое-то хранилище, а виджеты должны сами выбирать себе значения оттуда после своего создания. по листингу: Кликните здесь для просмотра всего текста
можно сразу так: ui->layoutSECNAME->addWidget( new QLabel( SECNAME[i] ) ); спинбокс пустой при создании, для сохранения его значений используй соответствующий сигнал: quantity = spinbox->value();//записываем в переменную количество замени на: connect(spinbox, &QSpinBox::valueChanged, this, [this](int value){quantity = value;}); Возможная утечка памяти, если fetcher не имеет владельца: HttpFetcher *fetcher = new HttpFetcher; елсе не нужен тут, иначе месседж выведется много раз (по размеру массива): else { QMessageBox::information(this,"","Такой тиккер не найден"); } Если SECID[i] - это сырой массив строк, то лучше пользоваться QStringList и его методом at() или циклом Тогда "так, нужно создавать label с именем из массива" может выглядеть так: QStringList names{"label1", "label2", "label3"}; ... for(const auto &name : names){ ui->layoutSECNAME->addWidget( new QLabel( name ) ); }
1
|
|
|
Заблокирован
|
||||||
| 01.09.2025, 22:57 | ||||||
|
Я бы ещё добавил, что QSettings под Окнами, по умолчанию пишет в РЕЕСТР!!!
Поэтому я тестировал и знакомился с ним, только что, вот так:
p.s. Кстати да, рано я обрадовался что готовая сериализация виджетов есть...
0
|
||||||
| 01.09.2025, 23:06 | |
|
0
|
|
|
Заблокирован
|
||
| 02.09.2025, 00:09 | ||
|
Думаю для ТС должно быть достаточно. Или просто сохранить все данные ручками, как в старые добрые. Меньше нужно знаний и времени. Хотя стоп. О чем это мы. Данные отдельно, виджеты отдельно. И проблема решена.
1
|
||
|
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
|
|||||
| 02.09.2025, 00:59 | |||||
|
SmallEvil, я так понимаю ход событий:
ТС увидел в примерах QSettings сохранение состояния saveState() для QMainWindow и сделал два неверных вывода, что: а) Сохраняется состояние всего контента окна, включая например, текст в лайнэдитах и тд. Я спецом уточнил:
Поэтому как вы пишите: Вспомнилось (ближе к концу темы смотрите ):Перемещение объекта класса из файла .txt в переменную
1
|
|||||
|
Заблокирован
|
||||||||||||
| 02.09.2025, 02:17 | ||||||||||||
|
Ну вот, пару виджетов на форме, сохранил/загрузил, без проверок, минимум:
0
|
||||||||||||
|
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
|
||
| 02.09.2025, 13:42 | ||
|
Думаю, наших примеров достаточно, что бы ТС пришел к какому-то пониманию решения своей задачи, которую я не особо понимаю.
0
|
||
|
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 97
|
|
| 02.09.2025, 14:36 [ТС] | |
|
на рабочем компе почему то не могу ни цитировать ни текс делать кодом, заранее извиняюсь.
начну с начала и в поподробнее. есть lineEdite строка в которую вводим текст. ввели текст нажали кнопку принять и: void MainWindow::on_pushButton_clicked() { QString emitent = ui->ticker->text();//берем введенный тикер и ищем for (unsigned int i = 0; i<std::size(SECID); ++i)//в массиве лежат уже слова и когда находим совпадение: { if (SECID[i] == emitent)//если нашли { QLabel *labelSECNAME = new QLabel(SECID[i]); // Создаем новую метку и называем его по SECID ui->layoutSECNAME->addWidget(labelSECNAME); // Добавляем метку на свой слой labelSECNAME->setText(SECNAME[i]); // Устанавливаем текст из массива settings.setValue("labelSECNAME/text",labelSECNAME->text()); и дальше, вот создался у нас например labelSECNAME с именем SECID[i] settings.setValue("labelSECNAME/text",labelSECNAME->text());//сохраняем текущий label затем чтобы нам загрузить его что загружать? я не знаю какой SECID вводил пользователь и под каким именем создался label, а их может быть 259 штук.
0
|
|
|
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
|
||
| 02.09.2025, 14:58 | ||
|
Добавлено через 12 минут Вот по листингу 10 и 19 поста я понимаю так: - есть поле ввода, где вводится название (товара?) - при нажатии кнопки , если имя товара есть в массиве SECID - формируется строчка из лейбла с названием товара и спинбокса с ценой, и вставляется в некий лейаут главного окна. Ну все, на окне появилась эта строчка, и?...
0
|
||
| 02.09.2025, 14:58 | |
|
Помогаю со студенческими работами здесь
20
Сохранение свойств виджета Сохранение состояния и положения виджета Размещение своего виджета на форме Установка фона виджета Qt. Управление сеансом и нестандартный вид окна виджета. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|