powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как написать универсальную функцию сохранения значений виджетов?
13 сообщений из 13, страница 1 из 1
Как написать универсальную функцию сохранения значений виджетов?
    #39536320
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть несколько диалоговых окон, на которых набросаны виджеты. Хочется написать универсальную функцию по сохранению значений виджетов между сеансами пользователя. Перебор виджетов диалогового окна и работа с объектом QSettings вопросов не вызывает. Не понятно как получить ЗНАЧЕНИЯ для сохранения. Ведь у меня текстовые называния виджетов, а нужно получить их значения.

Сейчас я значения получаю так (неуниверсально):
Код: plaintext
1.
Data = ui->NameWidget->text();



Как написать универсальную функцию?
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39536408
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,
я напишу в понедельник, как.
у нас это сделано
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39537551
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как примерно сделано у нас:

Реализован объект типа "список свойств" (Properties), который по сути является именованным списком значений на базе QMap<QString, QVariant>

Объект может через MetaObject привязываться ( connect ) к контролам с проставленным через DynamicProperty именем свойства, и слушать определённые сигналы, которые посылаются контролами при изменении их значения. Значение шлётся в сигнале в виде QVariant. сигналы шлются как propertyChanged(), примерно как описано тут

Контролы на форме все собственные, обучены слать эти сигналы.

Примерно так.

Возможно, можно задействовать контролы из QML, они вроде как это всё должны уметь уже сами.
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39537586
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivпримерно как описано тут прям родным повеяло, стройкой)) борланд-специфик проникает в мир Qt, оказывается, семимильными шагами))
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39537674
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLЕсть несколько диалоговых окон, на которых набросаны виджеты. Хочется написать универсальную функцию по сохранению значений виджетов между сеансами пользователя.
....
Как написать универсальную функцию? Есть такая вещь " сериализация ". Вот тут она тебе очень поможет.
Сделай для всех диалогов которые надо сохранять пару функций в духе save/load и в них сохраняй и восстановляй все что нужно сохранить и восстановить.
Просто сделай дополнительный класс:
Код: plaintext
1.
2.
3.
4.
class serializable {
   QString save() = 0;
   bool load(QString) = 0;
};

Добавь этот класс в качестве дополнительного предка в те диалоги где нужно. А в процедуре глобального сохранения диалогов - обходишь диалоги и если они потомки данного класса - вызывай соответствующие функции.
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39538044
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychMasterZivпримерно как описано тут прям родным повеяло, стройкой)) борланд-специфик проникает в мир Qt, оказывается, семимильными шагами))

Я думаю, ты сильно ошибаешься.
Там нет никакой борланд спесифик.
Там есть программирование, основанное на описании, на метаданных, т.е. декларативное.
Причём сделанное нормально, переносимо и открыто.
Так что существенно отличается от Borland.
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39538178
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТак что существенно отличается от Borland.та не. Вот, найди 8 отличий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
// проперти в стройке
// свойства
public:
	__property AnsiString author= { read = getAuthor, write = setAuthor };
// методы доступа
private:
	AnsiString getAuthor() const { return _author; }
	void setAuthor( const AnsiString &value ) { _author = value; }

// проперти в Qt
    Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged)
public:
    void setAuthor(const QString &a) {
        if (a != m_author) {
            m_author = a;
            emit authorChanged();
        }
    }
    QString author() const { return m_author; }


просто борланд встроил это в компилятор, а кутешники - в мок.
ну и сигналы, конечно, стройка кидать не умеет.

им бы ещё __closure реализовать как у борланда, эх))
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39538818
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl Есть такая вещь " сериализация ". Вот тут она тебе очень поможет.
Сделай для всех диалогов которые надо сохранять пару функций в духе save/load и в них сохраняй и восстановляй все что нужно сохранить и восстановить.
Просто сделай дополнительный класс:
Код: plaintext
1.
2.
3.
4.
class serializable {
   QString save() = 0;
   bool load(QString) = 0;
};

Добавь этот класс в качестве дополнительного предка в те диалоги где нужно. А в процедуре глобального сохранения диалогов - обходишь диалоги и если они потомки данного класса - вызывай соответствующие функции.

Так можно обычной процедурой в диалоге все сохранить :) Хочется отказаться от конкретики отдельного диалога, чтобы глобальный метод сам пробегал все виджеты, получал их ЗНАЧЕНИЯ (вот это у меня не получается!) и сохранял.
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39538823
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivКак примерно сделано у нас:

Реализован объект типа "список свойств" (Properties), который по сути является именованным списком значений на базе QMap<QString, QVariant>

Объект может через MetaObject привязываться ( connect ) к контролам с проставленным через DynamicProperty именем свойства, и слушать определённые сигналы, которые посылаются контролами при изменении их значения. Значение шлётся в сигнале в виде QVariant. сигналы шлются как propertyChanged(), примерно как описано тут

Контролы на форме все собственные, обучены слать эти сигналы.

Примерно так.

Возможно, можно задействовать контролы из QML, они вроде как это всё должны уметь уже сами.


Спасибо, но громоздко получается (надо каждый виджет привязывать к объекту).
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39539727
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychим бы ещё __closure реализовать как у борланда, эх))

Лучше ничего не делать как у Борланда.
Потому что Борланд наконец-то сдох.
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39539729
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLСпасибо, но громоздко получается (надо каждый виджет привязывать к объекту).

К какому объекту?
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39541889
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivК какому объекту?

авторРеализован объект типа "список свойств" (Properties), который по сути является именованным списком значений на базе QMap<QString, QVariant>
Объект может через MetaObject привязываться...
...
Рейтинг: 0 / 0
Как написать универсальную функцию сохранения значений виджетов?
    #39542493
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLMasterZivК какому объекту?

авторРеализован объект типа "список свойств" (Properties), который по сути является именованным списком значений на базе QMap<QString, QVariant>
Объект может через MetaObject привязываться...

Так там в том и дело, что это делается одной функцией, которая по именам к свойствам биндит соответствующие им контролы...
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как написать универсальную функцию сохранения значений виджетов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]