Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: daimon от Май 17, 2011, 13:47



Название: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: daimon от Май 17, 2011, 13:47
Есть форма на ней стеквиджет, на одной странице стеквиджета размещена группа виджетов - нужно для настройки кривой. Так вот задача такая количество страниц стеквиджета для настройки кривых графика изначально не известно, но минимум одна точно уже есть. При добавлении новой кривой - видно по структуре, которая идёт в класс формы, должна добавляться новая страница в стеквиджет с теми виджетами (только копия, а не адрес) для настройки новых кривых. Так как копирование виджетов запрещено программно, я не знаю как сделать. Новый класс настройки кривой делать не хочу, хочу как-то использовать, что есть на форме уже готовое (одна страница стеквиджета с внутренними виджетами)
Посоветуйте, что сделать?


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: GreatSnake от Май 17, 2011, 13:50
Один и тот же виджет может быть только в одном месте.


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: daimon от Май 17, 2011, 14:41
Один и тот же виджет может быть только в одном месте.
как тогда реализвать мою идею про динамическое добавление новых страниц в стеквиджет?


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: kambala от Май 17, 2011, 14:59
а что мешает создать виджет-родитель (хоть отдельный класс, хоть на лету) для группы виджетов и его добавлять в стек?


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: daimon от Май 17, 2011, 15:00
а что мешает создать виджет-родитель (хоть отдельный класс, хоть на лету) для группы виджетов и его добавлять в стек?
так получиться громоздко - был один класс, всё в нём (всё из формы) и вытаскивал
просто без дизайнера, да ещё один диалог, как-то не удобно, но если нет больше варианта, то придётся


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: mkv от Май 17, 2011, 15:58
похожую задачу решал при помощи QTabBar, QDataWidgetMapper и MVC
QTabBar - высылает сигналы о изменении таба, на него реагирует QDataWidgetMapper который проецирует данные из модели на набор виджетов.


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: m_ax от Май 17, 2011, 16:37
Есть форма на ней стеквиджет, на одной странице стеквиджета размещена группа виджетов - нужно для настройки кривой. Так вот задача такая количество страниц стеквиджета для настройки кривых графика изначально не известно, но минимум одна точно уже есть. При добавлении новой кривой - видно по структуре, которая идёт в класс формы, должна добавляться новая страница в стеквиджет с теми виджетами (только копия, а не адрес) для настройки новых кривых. Так как копирование виджетов запрещено программно, я не знаю как сделать. Новый класс настройки кривой делать не хочу, хочу как-то использовать, что есть на форме уже готовое (одна страница стеквиджета с внутренними виджетами)
Посоветуйте, что сделать?
Аха, и для каждой кривой создавать новые однотипные виджеты. Гениально)
Когда для переключения между наборами данных, которые отображет одна группа виджетов, достаточно просто менять сами данные и не клонировать их представление.
Прочитайте про MVC.


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: daimon от Май 17, 2011, 17:14
Есть форма на ней стеквиджет, на одной странице стеквиджета размещена группа виджетов - нужно для настройки кривой. Так вот задача такая количество страниц стеквиджета для настройки кривых графика изначально не известно, но минимум одна точно уже есть. При добавлении новой кривой - видно по структуре, которая идёт в класс формы, должна добавляться новая страница в стеквиджет с теми виджетами (только копия, а не адрес) для настройки новых кривых. Так как копирование виджетов запрещено программно, я не знаю как сделать. Новый класс настройки кривой делать не хочу, хочу как-то использовать, что есть на форме уже готовое (одна страница стеквиджета с внутренними виджетами)
Посоветуйте, что сделать?
Аха, и для каждой кривой создавать новые однотипные виджеты. Гениально)
Когда для переключения между наборами данных, которые отображет одна группа виджетов, достаточно просто менять сами данные и не клонировать их представление.
Прочитайте про MVC.

проще говоря - есть группа виджет - их в один виджет засунуть (класс) и к нему отправлять данные для отображения на этих же виджетах, а когда надо добавить новую кривую - просто новый объект и туда структура с настройками

а как модель привязать к виджетам не знаю, читал только про таблицы, деревья и списки, мол создаётся модель и вешается во вьювер, а как подобное с виджетами сделать и на какое представление тогда вешать не знаю


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: daimon от Май 17, 2011, 17:39
Надо создать наследника от базового класса модели и ещё сделать своё представление.
Поясните на простом примере: один виджет (QlineEdit)


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: GreatSnake от Май 17, 2011, 17:42
то понятно надо создать наследника от базового класса модели и сделать свою модель и сделать своё представление, чтоли
поясните на простом примере мол один виджет (QlineEdit) и он даёт строку для настроек
Твой "русский" настолько сложен для понимания, что просто слов нет :(


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: daimon от Май 17, 2011, 17:49
Надо создать наследника от базового класса модели и ещё сделать своё представление.
Поясните на простом примере: один виджет, на котором QlineEdit, Этот виджет и будет создаваться каждый раз как появляется новая кривая.

Что должно быть в модели?
Я думаю в модели сами данные - те настройки, которые забираются с представления - структура настроек графика
Что в представлении?
Я думаю в представлении должно описываться про виджеты в представлении и работа с моделью.

А вот точнее не знаю.


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: GreatSnake от Май 17, 2011, 18:07
Надо создать наследника от базового класса модели и ещё сделать своё представление.
Поясните на простом примере: один виджет (QlineEdit)
Мде... Запрос просто бредовый...
Тебе же уже предложили почитать о MVC. Вот хотя бы это (http://doc.crossplatform.ru/qt/4.3.2/model-view-introduction.html).


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: _OLEGator_ от Май 17, 2011, 18:49
Зачем клонировать виджеты, при редактировании нужной кривой просто обновлять данные в виджетах и все, запоминаешь текущую редактируемую кривую, обновил данные, применил изменения...


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: daimon от Май 17, 2011, 19:28
Зачем клонировать виджеты, при редактировании нужной кривой просто обновлять данные в виджетах и все, запоминаешь текущую редактируемую кривую, обновил данные, применил изменения...
слево список с пунктами меню, по индексу вызывается страница стеквиджета, как потом стягивать в настройки, если например разные

на картинке пока только для одной кривой


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: m_ax от Май 17, 2011, 19:50
Зачем клонировать виджеты, при редактировании нужной кривой просто обновлять данные в виджетах и все, запоминаешь текущую редактируемую кривую, обновил данные, применил изменения...
слево список с пунктами меню, по индексу вызывается страница стеквиджета, как потом стягивать в настройки, если например разные
Ну даже не знаю что и сказать..
Нет никакой необходимости для каждой кривой создавать новые виджеты только лишь для того, чтоб отобразить на них другой набор данных. Это очень плохое решение.
Кстати, если вы посмотрите в реализацию lightplot2d, то найдёте там нужное вам решение.
Вот пример, о котором вы вероятно говорите:
Слева список всех кривых, справа панель с виджетами для визуализации и редактирования данных.


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: daimon от Май 17, 2011, 20:02
Вы правы, сроки поджимают, а я пока так с моделями и представлениями не знаком


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: daimon от Май 17, 2011, 20:10
Посмотрел все последнии версии LightPlot2d, подобного диалога не нашел, есть только с таблицей и без возможности добавить 2 кривую


Название: Re: создание новый виджетов на основе старых (как бы копирование виджета)
Отправлено: m_ax от Май 17, 2011, 20:18
Цитировать
Вы правы, сроки поджимают, а я пока так с моделями и представлениями не знаком
Суть в самой идеи модели-представления. Это не означает, что нужно непременно использовать Qt MVC.

Цитировать
Посмотрел все последнии версии LightPlot2d, подобного диалога не нашел, есть только с таблицей и без возможности добавить 2 кривую
Я же вам уже давал эту ссылку: пост №100 в http://www.prog.org.ru/topic_10208_90.html#lastPost
Оттуда скачиваете виджет. Но он требует установленной lightplot2d