Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Готовый SettingsDialog 
V
    Опции темы
borisbn
Дата 29.2.2012, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Здравствуйте.
Идея следующая: имеется набор параметров (имя, тип, значение, м.б. что-то ещё - например, регэкс для поля ввода), сгруппированных по секциям. Хранятся они (ну... допустим) в xml-файле. Хочу сделать модулёк, который строит по этому файлу "стандартный" диалог настроек типа такого
user posted image
т.е. имена секций слева списком, а справа параметры, относящиеся к выделенной секции - имя и поле ввода, тип которого зависит от типа параметра.
Как это всё делать ручками - понятно на 0x64%.
Вопрос: есть ли готовые подобные решения ?
Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
_GRIN_
Дата 1.3.2012, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



думаю врядли
Цитата(borisbn @  29.2.2012,  19:34 Найти цитируемый пост)
Как это всё делать ручками - понятно на 0x64%.

Интересно, я например хз. как сделать такое УНИВЕРСАЛЬНОЕ решение, что бы формировало окошко, подобное тому как на скришоте (с картинками и т.д.) из любого моего конфига.



--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
borisbn
Дата 1.3.2012, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(_GRIN_ @  1.3.2012,  10:17 Найти цитируемый пост)
 УНИВЕРСАЛЬНОЕ решение, что бы формировало окошко, подобное тому как на скришоте

ну.... это я по-максимуму захотел (хотя и это тоже не бином Ньютона). Мне бы чтобы просто было имя параметра и поле ввода (lineEdit - для параметров типа текст, spinEdit - для числовых, comboBox - для выбора из списка, checkBox - для булевских). А всякие картинки, гиперссылки, и т.п. - совершенно необязательно.
Жалко. Не хочется велосипедировать... Но, если готового нет - то придётся.
Хотя, подождём, может кто-нибудь видел...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
math64
Дата 1.3.2012, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



С картинками тоже проблем особых нет - указываешь в xml имя ресурса, начинающееся с ':' или путь до файла с картинкой.

PM   Вверх
borisbn
Дата 1.3.2012, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Господа, как делать это ручками - понятно. Тем более, что формат файла я сам буду разрабатывать. Не хочется изобретать двухколёсное средство передвижения с ножной тягой...
Что-то подобное я видел в PSI. Но м.б. я и ошибаюсь


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Amp
Дата 1.3.2012, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



У таких решений есть определенные недостатки. Часто отсутствует какая-либо динамика и зависимости между элементами настроек - например зависимость между состояниями чекбоксов и доступностью других элементов управления. Дубовая валидация пользовательского ввода, когда проверка на вхождение в диапазон - это максимум, что ты можешь сделать. Когда дейсвия в страницах влияют на само дерево настроек и его иерархию. И куча всяких мелких, но неприятных вещей, которые могут вылезти в последствии. Поэтому имеет смысл думать не о полностью автоматическом построении дерева настроек, а о комбинированных решениях с возможностью задания кастомных страниц настроек.
PM MAIL   Вверх
newbee
Дата 1.3.2012, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 1
Всего: 19



По-моему у многих программистов, когда-либо занимавшихся разработкой приложений с графическим интерфейсом с модулем настройки, есть наработки по созданию обобщенного модуля конфигурирования. Я сначала делалатакую вещь на XML-файлах, столкнулась с проблемами, описанными Amp, то есть вроде бы обощенное решение на деле не учитывает и не расширяется до множества частных задач. Первым решением было внедрение в XML программируемых элементов (аля скриптовый язык внутри XML). В общем это было конечно рабочим, но монстроватым, в итоге XML был выброшен на помойку как совершенно бесполезная технология усложнения ПО и модуль переписан на лисп: сразу и возможность ведения древовидных конфигов на макросах и динамичность и программируемость из коробки.


--------------------
You're face to face
With man who sold the world
PM   Вверх
borisbn
Дата 1.3.2012, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



user posted image
вот (ооочень примерно) что я хочу. но не так (всё в виде строк), а чуток красивее.

Amp, newbee, спасибо. Ценные замечания. кроме совета бросить всё и сделать это на лиспе... ессно - 
user posted image 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
borisbn
Дата 12.3.2012, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Сделал... Здесь описание
А вот куда лучше залить исходники - хочу вас попросить подсказать.
Пока что кидаю на свой дропбокс


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Alca
Дата 12.3.2012, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Цитата

А вот куда лучше залить исходники - хочу вас попросить подсказать.

https://bitbucket.org/


--------------------
PM WWW ICQ Skype Jabber   Вверх
Amp
Дата 12.3.2012, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



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


M
JackYF
Оффтопик.

PM MAIL   Вверх
borisbn
Дата 12.3.2012, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Alca, спасибо, но я уже сделал проект на СФ - https://sourceforge.net/projects/guisettings/

Цитата(Amp @  12.3.2012,  19:18 Найти цитируемый пост)
прикрутили бы там поле поиска. 

это у меня в \todo smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 12.3.2012, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



borisbn, есть предложения по улучшению.
1. возможность загрузки значений переменных не только из xml, но и из программы. Для этого можно использовать The Property System. Благодаря этому в xml можно будет сразу указать: value_property="<property_name>" и items_property="<property_name>"; а Config сам запросит нужные свойства при необходимости, а так же задаст их.
2. Каждый раз вызывать cfg.get( "First section name", "Dir for log" ) по-моему долго (да и писанины много). Имхо, лучше сделать так: Конфиг состоит из секций и значений. Конфиг является глобальной секцией (потомок класса ConfigSection). У ConfigSection есть методы: ConfigSection* section(QString), ConfigSection* addSection(QString), ConfigValue* value(QString), ConfigValue* addValue(QString); которые необходимы для получения доступа к элементам, а так же для генерации конфигурации без использования xml.

Если этот конфиг вылизать, то можно будет толкнуть в Qt Project.  smile 
PM   Вверх
borisbn
Дата 13.3.2012, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Апдейтнул проект на sourceforge - добавил возможность поиска параметра по имени из GUI

bsa, Спасибо за предложения. Возможность добавления параметра из программы стоит первое в \todo
По поводу второго пункта - долго быть не должно (я специально при изменении на экране делаю копию в map map'ов для быстрого доступа. По поводу писанины - согласен. Длинновато. Что-нибудь придумаю. А по поводу - получить секцию и работать непосредственно с ней - ИМХО интерфейс класса получится сложноватым... Но что-нибудь в этом роде можно придумать. Типа как в QSettings:
Код

cfg.beginGroup( "bla bla" );
   cfg.value( "bla 1" );
   cfg.value( "bla 2" );
cfg.endGroup();


Цитата(bsa @  12.3.2012,  20:31 Найти цитируемый пост)
Если этот конфиг вылизать, то можно будет толкнуть в Qt Project

Вы это серьёзно ? Если да, то предприму для этого всё (ну, или почти всё)))
Единственное, чего хочется, так это чтоб использование этого конфига было бы максимально простым

Жду дальнейших предложений.

Это сообщение отредактировал(а) borisbn - 13.3.2012, 20:02


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 13.3.2012, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(borisbn @  13.3.2012,  21:01 Найти цитируемый пост)
А по поводу - получить секцию и работать непосредственно с ней - ИМХО интерфейс класса получится сложноватым...

Я тебе уже написал основные методы:
Код

class ConfigValue;
class ConfigSection
{
public:
   ConfigSection* section(const QString &name);  //returns pointer to existing subsection with specified name
   ConfigSection* createSection(const QString &name, ConfigSection *next = 0); //creates new subsection before next (if next 0, then section will be added to the end)
   ConfigValue* value(const QString &name); //returns pointer to existing value with specified name
   ConfigValue* createValue(const QString &name, ConfigValue *next = 0); //creates new value before next (if next 0, then value will be added to the end)
   bool isChecked() const;
   void setChecked(bool);
   void setCheckable(bool);
};

class ConfigValue
{
public:
   enum Type {
      Text,
      Bool,
      Combo,
      //...
   };

   Type type() const;
   void setType(Type t);

   const QVariant& get() const;
   void set(const QVariant &v);

   const QVariant& minimum() const; //default NULL - type minimum
   void setMinimum(const QVariant &v);

   const QVariant& maximum() const; //default NULL - type maximum
   void setMaximum(const QVariant &v);

   const QVariant& step() const; //default, 1
   void setStep(const QVariant &v);

   const QVariant& items() const;
   void setItems(const QVariant &v); //can be QString for file, QStringList for combo or radio...
};

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.