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

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



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

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

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

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

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

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

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

Я думаю, ты сильно ошибаешься.
Там нет никакой борланд спесифик.
Там есть программирование, основанное на описании, на метаданных, т.е. декларативное.
Причём сделанное нормально, переносимо и открыто.
Так что существенно отличается от Borland.
...
Рейтинг: 0 / 0
18.10.2017, 15:55
    #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
19.10.2017, 15:34
    #39538818
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать универсальную функцию сохранения значений виджетов?
White Owl Есть такая вещь " сериализация ". Вот тут она тебе очень поможет.
Сделай для всех диалогов которые надо сохранять пару функций в духе save/load и в них сохраняй и восстановляй все что нужно сохранить и восстановить.
Просто сделай дополнительный класс:
Код: plaintext
1.
2.
3.
4.
class serializable {
   QString save() = 0;
   bool load(QString) = 0;
};

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

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

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

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

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

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

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


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

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

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

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

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

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


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