Russian Qt Forum
Апрель 18, 2024, 22:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4]   Вниз
  Печать  
Автор Тема: Итераторы в последовательных контейнерах  (Прочитано 23322 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #45 : Июль 26, 2014, 16:00 »

Все это для того, что бы дать пользователю возможность создавать UI без написания кода и соответственно перекомпиляции всей системы.
Например, пользователь написал скрипт, которому для работы нужно задать три параметра (два числа и цвет). Пользователь рисует в том же дизайнере диалог, состоящий из двух QLineEdit и ColorSelector и создает коллекцию структур, в которых указаны начальные значения для чисел, диапазоны, начальный цвет и т.д.
Эту коллекцию и UI-файл с диалогом передается движку, который создает диалог, устанавливает все параметры и показывает его пользователю, тот задает нужные параметры и жмет Ok, движок сохраняет их обратно в коллекцию и завершается. Скрипт берет заданные пользователем данные и выполняется.
Совершенно верно, Вы достаточно сообразительный паренек (только с излишним самомнением). Ну правда подхватывает данные не скрипт, а С код - но не суть. Все равно есть контейнер "форматок" созданный извне + контейнер UI айтемов + сам поток (коллекция) значений. Вот и надо перегонять данные туда и обратно.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #46 : Июль 26, 2014, 16:12 »

Совершенно верно, Вы достаточно сообразительный паренек (только с излишним самомнением).
За паренька - спасибо. Давненько меня не называли пареньком, как-то не у всех поворачивается язык назвать сорокалетнего дядю - "пареньком". Улыбающийся
Да и на сообразительность пока не жаловался. Улыбающийся А вот ответить вам тем же, я к сожалению, не могу. Все приходится вам разжевывать и на пальцах показывать. Подмигивающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #47 : Июль 26, 2014, 17:25 »

.. назвать сорокалетнего дядю - "пареньком". Улыбающийся
До дяди там еще далековато. у Вас все время вскипает юношеский пыл - впрочем это хорошо (увы, у меня это давно потеряно)

Все приходится вам разжевывать и на пальцах показывать. Подмигивающий
Так я ж "старый ретроград"  Улыбающийся

2_Bers я, право, удивлен, задача довольно стандартная, термин "дескриптор параметра" достаточно известен. Что неясно - я постараюсь объяснить пополнее
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #48 : Июль 26, 2014, 17:32 »


Все это для того, что бы дать пользователю возможность создавать UI без написания кода и соответственно перекомпиляции всей системы.

Нужно что то типа QML?

Если бы я решил изготовить собственную гуевую систему, то использовал бы идею "все  - есть виджет".

Суть которой - единственный класс виджет реализует технику "виджет в виджете", и таки образом "из коробки" умеет трансформироваться в великое многообразие различных "конкретных виджетов" без необходимости дописывать код.

Пример:

Код:
auto form =
  Form::create("form")
    .size(10,10)
    .position(100,100)
    .title("Form")  
    .widget<Box>("box1")
      .size(10,10)
      .position(100,100)
      .widget<Label>("label1")
        .size(10,10)
        .position(100,100)
        .text("this is label")
      .init()
    .init()
    .widget<Box>("box2")
      .size(10,10)
      .position(100,100)
    .init()
  .show();

Выше указанный код может быть как исходником на языке с++, так и обычным текстовым файлом, который можно подгрузить и распарсить в рантайме.

В любой момент времени можно заменить значение любого "свойства" порожденного виджета в рантайме.

Проблема может возникнуть только при необходимости добавить принципиально новые "базовые свойств" самого виджета.

Эту проблему можно решать по разному.

Одно из довольно интересных решений - в специальном xml-подобном файле описывается название свойства, и его поведение:
"что будет происходить если..."

в качестве источника данных выступают примитивные типы - обычные int/float/string/etc
(привет, вариант!)

Другие виджеты смогут "цеплять" новое доступное свойство по его символьному имени.

резюмируя: виджет - это просто коробка так называемых "свойств".
(привет, компонентная система!)

Коллекция доступных "свойств" может создаваться либо в нативном коде, либо в скриптах.
Разные виджеты - это на самом деле один и тот же виджет, просто с разным набором свойств.

Свойства, которые повесили на один виджет могут "общаться" друг с другом посредством системы сообщений.
И в соотвествии со своей бизнес-логикой выполнять некоторые действия.

В качестве переменных с которыми могут захотеть работать свойства, можно передавать вариантивный тип данных.
Потому что он поддерживает все фундаментальные типы, и с его помощью можно передавать динамические структуры любой сложности.

Вариантивный тип так же можно использовать для связки "свойства порожденного в скриптах" с нативным кодом с++.
Тогда "динамичность" вариативного типа позволит установить полноценное общение между "скриптом" и "нативным кодом" без необходимости перекомпилировать все приложение.

« Последнее редактирование: Июль 26, 2014, 17:43 от _Bers » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #49 : Июль 26, 2014, 17:34 »

До дяди там еще далековато. у Вас все время вскипает юношеский пыл - впрочем это хорошо (увы, у меня это давно потеряно)
Спасибо, спасибо. Улыбающийся
Если я в свои годы сохранил юношеский пыл, то это несомненно хорошо.

Так я ж "старый ретроград"  Улыбающийся
Ретроград отвергает все новое, а вы интересуетесь, но... при малейшей сложности/необходимости подумать - сдуваетсь. А после ваше традиционное: "Что я не понимаю/не умею, то не нужно и даже очень вредно, причем для всех." Улыбающийся
/* Это кстати говорит о комплексе. */
« Последнее редактирование: Июль 26, 2014, 17:51 от Old » Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #50 : Июль 26, 2014, 17:35 »

я, право, удивлен, задача довольно стандартная, термин "дескриптор параметра" достаточно известен. Что неясно - я .постараюсь объяснить пополнее

С ваших слов задача была мне не понятна.

Если я сейчас правильно понял: вы хотите из текстового описания загрузить готовый layout.
То бишь формочку на экране из текстового файлика.

Я знаю несколько способов. Ни один из них не использует свитч-кейс. И все  позволяют порождать новые виджеты без необходимости перекомпиляции гуи-библиотеки.

Правда эта тема не имеет ни малейшего отношения к итераторам.

ps/ итераторы могут пригодиться, например, что бы предоставить пользователям возможность по простому, легко и безгемморойно рекурсивно пробежаться по всем чаилдам конкретного виджета.
« Последнее редактирование: Июль 26, 2014, 17:42 от _Bers » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #51 : Июль 26, 2014, 18:11 »

Если я сейчас правильно понял: вы хотите из текстового описания загрузить готовый layout.
То бишь формочку на экране из текстового файлика.
Почему из текстового? Редактор дескрипторов/описаний никто не писал - взяли готовый из Mac OS Resourcerer), он там был еще до прихода линукса. Впрочем это непринципиально - так или иначе есть описание/дескриптор параметра (форматка)

Я знаю несколько способов. Ни один из них не использует свитч-кейс. И все  позволяют порождать новые виджеты без необходимости перекомпиляции гуи-библиотеки.
Здесь не ставится задача что-то порождать, т.е. вполне достаточно неск базовых/имеющихся контролов. Задача принимать/выливать введенные значения в поток (конечно используя форматку)

Правда эта тема не имеет ни малейшего отношения к итераторам.
Не имеет, навеяно Вашим "умеет принимать примитивные типы" - ну а так ли уж это примитивно?  Улыбающийся
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #52 : Июль 26, 2014, 19:19 »

Почему из текстового?
Здесь не ставится задача что-то порождать
ну а так ли уж это примитивно?  Улыбающийся

Вы определитесь что именно вам нужно.
Смысли, какой именно вопрос вы хотите задать лично мне, или другим участникам ветки.

Пока получается - есть клюкало. клюкало работает. клюкало не нужно менять. Так уж ли примитивно работает клюкало?

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #53 : Июль 26, 2014, 19:34 »

Пока получается - есть клюкало. клюкало работает. клюкало не нужно менять. Так уж ли примитивно работает клюкало?
Да хотя бы и так (и даже неважно что Вы имеете ввиду под "клюкало"). Есть код который хотя и работает - но выглядит просто ужасно. Как переписать его грамотно? Как действовать в след раз в аналогичной ситуации? Это нормальный вопрос(ы), есть что предложить - я Вас внимательно слушаю.
Записан
Bepec
Гость
« Ответ #54 : Июль 26, 2014, 22:27 »

Переписать ради переписывания - это уже на грани идеального программирования. У вас видимо много времени Улыбающийся
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #55 : Июль 26, 2014, 22:46 »

Переписать ради переписывания - это уже на грани идеального программирования. У вас видимо много времени Улыбающийся

Многие программисты перфекционисты Улыбающийся
Записан

Bepec
Гость
« Ответ #56 : Июль 27, 2014, 08:35 »

Я тоже так хочу. Но времени нет Веселый
Записан
Страниц: 1 2 3 [4]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 22.