Russian Qt Forum
Ноябрь 22, 2024, 16:11
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Клонирование
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Клонирование (Прочитано 4830 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Клонирование
«
:
Сентябрь 05, 2016, 10:47 »
Добрый день
Есть объекты в виде иерархии/дерева. Каждый объект имеет много всякого добра, напр "геометрию", "материал" (цвета, текстуры и.т.п.). И вот поставлена задача создания "клонов". Юзер выбирает нод в дереве и жмет бубочку "Clone". Копируется только нод, без child'ов (вот он - клон), но его child'ы как бы все равно существуют и в окнах отображаются, просто в дереве их нет. Смысл в том что клонированный child своих данных имеет очень мало, в основном юзает данные "оригинала". Клон (родительский нод) помнит все оригиналы и умеет их рисовать. Можно подходить и проще - объект "хранит только изменения", а остальные данные - использует тело др объекта.
И тут возникает проблема - child'ам клона может потребоваться больше своих данных. Напр оригинал имеет один материал (синий), а юзер хочет назначить другой (красный). Каким образом юзер это может сделать? Ведь child'ов клона в иерархии нет - и данных для них нет. И окно где можно задать цвет никак не вызвать. Как же должно быть организовано UI в таком случае?
Подкиньте идеек
Спасибо
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Клонирование
«
Ответ #1 :
Сентябрь 05, 2016, 11:05 »
Могу предложить способ организации данных, в котором каждый из элементов дерева всегда хранит только изменения (например, map< key, variant >). Элемент предоставляет собственные данные, если у него они есть, или обращаемся к верхнему в иерархии элементу, если данных нет; до тех пор, пока не получим данные или не закончится дерево.
Тогда клонирование означает формирование промежуточного элемента дерева сразу после клонируемого.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Клонирование
«
Ответ #2 :
Сентябрь 05, 2016, 12:32 »
в момент изменения создавать копию и изменять
clone = node
clone.some_param = green
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Клонирование
«
Ответ #3 :
Сентябрь 05, 2016, 13:00 »
А в чем проблема показывать чилдов клона в иерархии?
Ведь они же физически существуют.
А их отсутствие будет только путать юзара, он начнет биться в истерике и писать баг-репорты.
Добавим чилдов, покажем их параметры как "наследованные" (например, "серым" цветом или еще как).
Если юзер тыкнул на параметр и поменял его - то вместо "серого" параметр должен стать активным.
Кактотаг.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Клонирование
«
Ответ #4 :
Сентябрь 05, 2016, 14:30 »
Цитата: qate от Сентябрь 05, 2016, 12:32
в момент изменения создавать копию и изменять
clone = node
Цитата: Racheengel от Сентябрь 05, 2016, 13:00
А в чем проблема показывать чилдов клона в иерархии?
Ведь они же физически существуют.
Нет. Чайлд клона = это не объект (точнее не тот полноценный объект что добавляется в дерево). Это просто данные ("изменения", "огрызки") которые хранит клон для каждого чайлда.
Цитата: Racheengel от Сентябрь 05, 2016, 13:00
А их отсутствие будет только путать юзара, он начнет биться в истерике и писать баг-репорты.
То моя забота как его успокоить
Цитата: ssoft от Сентябрь 05, 2016, 11:05
Могу предложить способ организации данных, в котором каждый из элементов дерева всегда хранит только изменения (например, map< key, variant >). Элемент предоставляет собственные данные, если у него они есть, или обращаемся к верхнему в иерархии элементу, если данных нет; до тех пор, пока не получим данные или не закончится дерево.
Такой необходимости нет, каждый child клона знает свой "оригинал", который может меняться на лету. Изменили оригинал - изменились чвйлды всех клонов. С этим вроде "решаемо" (хотя тоже хлопот хватает). Но вот что делать с UI? Как юзверь должен менять то чего.. нет?
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Клонирование
«
Ответ #5 :
Сентябрь 05, 2016, 14:39 »
Цитата: Igors от Сентябрь 05, 2016, 14:30
Изменили оригинал - изменились чвйлды всех клонов. С этим вроде "решаемо" (хотя тоже хлопот хватает). Но вот что делать с UI? Как юзверь должен менять то чего.. нет?
Это понятно. Но посколько "оригиналы" известны - то чайлд клона мог бы в гуе их отображать как "наследованные" (т.е. со значениями оригиналов, но в др. стиле, серенькими там). А как только юзер ткнул мышом на параметр и поменял - он перестает быть "наследованным" и отображается как нормальный параметр.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Клонирование
«
Ответ #6 :
Сентябрь 06, 2016, 08:37 »
Цитата: Racheengel от Сентябрь 05, 2016, 14:39
Это понятно. Но посколько "оригиналы" известны - то чайлд клона мог бы в гуе их отображать как "наследованные" (т.е. со значениями оригиналов, но в др. стиле, серенькими там).
Если нод в дереве - немедленно получаю (или огребаю) "вытекающие". Напр юзер имеет право отлинковать его от парента или прилинковать к другому - но для чайлдов клона это работать не будет. Или даже просто "удалить" - нет такой операции для чайлда. Получается что с "серенькими" почти ничего нельзя делать - ну и нафиг тогда они нужны?
Цитата: Racheengel от Сентябрь 05, 2016, 14:39
А как только юзер ткнул мышом на параметр и поменял - он перестает быть "наследованным" и отображается как нормальный параметр.
Я понял идею, но параметр может быть глубоко "закопан" в иерархии
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Клонирование
«
Ответ #7 :
Сентябрь 06, 2016, 10:57 »
Тогда так:
- в списке параметров чайлдов показывать только изменённые параменты (их можно изменять или удалять непосредственно).
- последним пунктом списка сделать "Добавить..", который будет вызывать диалог с иерархией всех параметров "родителя" (если их дофига, то со строкой поиска/фильтра). Здесь можно будет выбрать параметры, которые должны отличаться от оригинала. По "ок" они добавляются в список выше.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...