Russian Qt Forum
Ноябрь 24, 2024, 07:34
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
ГУИ. Навигационное дерево + редактирование объектов.
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: ГУИ. Навигационное дерево + редактирование объектов. (Прочитано 12882 раз)
span
Гость
ГУИ. Навигационное дерево + редактирование объектов.
«
:
Ноябрь 04, 2007, 11:59 »
Доброго дня!
Извиняюсь, если не совсем корректно назвал топик.
В QT новичек, около 1 мес. работы.
Разрабатываю ГУИ для редактирования объектов в БД.
Хотел получить несколько общих советов.
Что хочу:
Всегда одно и то же окно. Слева - дерево объетов БД. (пользователи, группы, конфигурации и.т.д.). Справа - Table (Table view) со списком объектов в группе(если выбрана группа) + виджет для редактирования параметров объекта.
Примеров такой организации полно. MS Outlook например. Слева дерево, посреди - список, совсем справа - содержание письма.
Пока сделал следующее:
Read-only модель, описывающая дерево (как раз той структуры, которую хочу). В internal pointer`ах храню достаточно данных для получения объектов из БД. Ловлю сигналы от TreeView, анализирую, надо ли что-нибудь менять в правой части. Создал набор виджетов в дизайнере для редактирования параметров объектов. создаю в статически, и при надобности заполняю их нужными полями и вызываю у них show\hide.
Получается все как-то громоздко... не так изящно, как с model\view, реализованном в дереве навигации.
Есть ли какая-нибудь общая технология для реализации такого типа интерфейса? (отображение списка объектов в гриде + редактирование полей в самописном виджете + удобное добавление/редактирование объектов).
Записан
ритт
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #1 :
Ноябрь 04, 2007, 12:28 »
читаем документацию? QDataWidgetMapper
Записан
ритт
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #2 :
Ноябрь 04, 2007, 12:34 »
ммм...хотелось бы ещё уточнить: для заполнения модели таблички (списка в середине) используются простые запросы (вида "селект _поля_ фром _таблица_ вхере _вхере_клаусе_")?
и я бы сделал виджеты на виджете редактирования не статичными с шоу/хайд, а динамически создаваемыми/удаляемыми при необходимости
Записан
span
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #3 :
Ноябрь 04, 2007, 13:10 »
Цитата: xep от Ноябрь 04, 2007, 12:34
ммм...хотелось бы ещё уточнить: для заполнения модели таблички (списка в середине) используются простые запросы (вида "селект _поля_ фром _таблица_ вхере _вхере_клаусе_")?
и я бы сделал виджеты на виджете редактирования не статичными с шоу/хайд, а динамически создаваемыми/удаляемыми при необходимости
1) Да, всегда простые селекты. Меняются только список запрашиваемых полей, названия таблиц (вьюх) и вхере. Я эти данные беру из internalPointer`ов item`ов дерева. Хотелось бы вообще не делать на каждый список разных объектов разные виджеты, а сделать какой-нить один. Еще надо бы туда стандартные ф-и навигации засунуть, опять же, одинаковые для всех типов объектов (вперед/назад, +\-, рефреш и.т.д.)
2) Я тоже сначала хотел в динамика сделать создание "custom" виджетов. Но, имхо, бастрее будет show\hide (или я не прав?), и еще не пойму, как избежать утечки памяти: я вызываю конструкторы своих виджетов, а в них SetupUi, в котором, естественно, множество new.
Записан
ритт
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #4 :
Ноябрь 04, 2007, 14:27 »
на часть вопросов отвечает QDataWidgetMapper. навигация вперёд/назад - тоже QDataWidgetMapper.
утечек не будет, если пишется правильно. а конструкторы-сетапуи-множество_нью мне мало о чём говорит - уж лучше код!
Записан
Вячеслав
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #5 :
Ноябрь 04, 2007, 15:28 »
Он имел ввиду ту хрень, которую uic создает из ui файла
Записан
span
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #6 :
Ноябрь 04, 2007, 15:55 »
Цитата: Вячеслав от Ноябрь 04, 2007, 15:28
Он имел ввиду ту хрень, которую uic создает из ui файла
Ага, именно ту хрень в виду и имел.
Есть вообще возможность как-нибудь освобождать память после SetuрUi? Например, у меня свой виджет, он наследует QDialog и класс сделанный uic`ом. в конструкторе - SetupUi(this). Что в деструктор кинуть, чтобы удалились все виджеты, созданные в дизайнере?
Записан
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #7 :
Ноябрь 04, 2007, 16:09 »
Цитата: span от Ноябрь 04, 2007, 15:55
Есть вообще возможность как-нибудь освобождать память после SetuрUi? Например, у меня свой виджет, он наследует QDialog и класс сделанный uic`ом. в конструкторе - SetupUi(this). Что в деструктор кинуть, чтобы удалились все виджеты, созданные в дизайнере?
Дык, так они сами удаляться, когда ты удалишь свой диалог
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Вячеслав
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #8 :
Ноябрь 04, 2007, 16:29 »
Не народ
Это даж не смешно
Давайте фак рисовать штоль
Ато два разв в день одно и тож - это перебор IMHO ж) Но с другой стороны - повторенье-мать ученья
Записан
ритт
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #9 :
Ноябрь 04, 2007, 17:40 »
Цитата: Вячеслав от Ноябрь 04, 2007, 15:28
Он имел ввиду ту хрень, которую uic создает из ui файла
это и так понятно...но я ж не о том!
вообще неконструктивный подход...одному накидайте алгоритм программы, а то он не может мингв32-мэйк запустить и поэтому мысля стоит; другого научите плюсам, а то он только перл знает...и никто ж до последнего не признаётся что ему надо и что у него в действительности не работает
> Давайте фак рисовать штоль
+1
только на форуме это будет жестоко. надо в таком случае викулю и закрепить ветку со ссылкой на этот фак...
а потом злобно так рожей всех тыкать туда
Записан
Вячеслав
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #10 :
Ноябрь 04, 2007, 18:03 »
Гы
Ну тады полетели
Вопрос только -куда
Здешные админы могут Вику присобачить ?
Записан
span
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #11 :
Ноябрь 04, 2007, 22:18 »
Цитата: Вячеслав от Ноябрь 04, 2007, 18:03
Гы
Ну тады полетели
Вопрос только -куда
Здешные админы могут Вику присобачить ?
Я вообще только рад буду, если послужу причиной создания ФАКа)). Можно даже ссылочку на меня там кинуть). Это всё шутки.
1) По поводу уничтожения объектов, созданных в дизайнере - понял. Не просто так им паренты задаются.
2) Почитал про QDataWidgetMapper. Поиграл с ним на примере Демо "books". Все просто отлично, как раз то что надо. Но! Добавил на форму кнопки для навигации, связал их сигналы clicked() соответственно с toPrevious() и toNext(). Данные в инпутах, связанных с моделью через QDataWidgetMapper меняются как надо, а TableView не меняется. Хотя связан с той же моделью. Хочется, чтобы при нажатии на кнопки "Вперед"/"Назад" менялась еще и текущая строка в tableView. Как это сделать? И еще: как сделать, чтобы данные были изменяемыми только через инпуты (lineEdit, spinBox etc.), связанные с моделью через QDataWidgetMapper
Хочу чтобы таблица была read-only.
А вообще, всем спасибо за ответы! Трудно в рунете найти похожее место)
«
Последнее редактирование: Ноябрь 04, 2007, 22:20 от span
»
Записан
ритт
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #12 :
Ноябрь 05, 2007, 05:13 »
2) модель не может/не должна инициировать какие-либо действия во вьюхе. грубо говоря, модель - хранилище данных (точнее, реинтерпретация части другого хранилища) - в данном случае хранилище таблицы или её части. а вьюха - визуальныя оболочка над этим хранилищем.
/*вспомни дос и волков коммандер*/
чтобы связка сигналов clicked() баттонов с toPrevious() и toNext() модели как-либо отражалась на вьюхе, надо вязать эти же кликеды на селект соответствующей строки во вьюхе
об проектировании модель/вид тоже весьма развёрнуто написано в доках
>как сделать, чтобы данные были изменяемыми только через инпуты (lineEdit, spinBox etc.), связанные с моделью через QDataWidgetMapper Хочу чтобы таблица была read-only
ты хочешь, чтобы данные нельзя было редактировать из вьюхи, а только из диалога, размаппенного на модели?
и в чём проблема? ставишь модели стратегию QSqlTableModel::OnRowChange, для таблицы выбираешь рид-онли вьюху, например, QSqlQueryModel...и всё
или я что-то пропустил?
Записан
span
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #13 :
Ноябрь 05, 2007, 15:35 »
Цитата: xep от Ноябрь 05, 2007, 05:13
2) модель не может/не должна инициировать какие-либо действия во вьюхе. грубо говоря, модель - хранилище данных (точнее, реинтерпретация части другого хранилища) - в данном случае хранилище таблицы или её части. а вьюха - визуальныя оболочка над этим хранилищем.
/*вспомни дос и волков коммандер*/
чтобы связка сигналов clicked() баттонов с toPrevious() и toNext() модели как-либо отражалась на вьюхе, надо вязать эти же кликеды на селект соответствующей строки во вьюхе
об проектировании модель/вид тоже весьма развёрнуто написано в доках
Спасибо за совет, все так и сделал - работает отлично.
Цитата: xep от Ноябрь 05, 2007, 05:13
ты хочешь, чтобы данные нельзя было редактировать из вьюхи, а только из диалога, размаппенного на модели?
и в чём проблема? ставишь модели стратегию QSqlTableModel::OnRowChange, для таблицы выбираешь рид-онли вьюху, например, QSqlQueryModel...и всё
или я что-то пропустил?
Не понял ничего... Да, я хочу чтобы данные из модели можно было бы редактировать ТОЛЬКО из формы, размапленной по модели.
У меня модель read-write. И получается, что я могу редактировать данные и через замеппленные контролы и через вью (в моем случае - просто QTableView).
"для таблицы выбираешь рид-онли вьюху, например, QSqlQueryModel...и всё" - не понял. Можно прояснить чуток?
«
Последнее редактирование: Ноябрь 05, 2007, 15:39 от span
»
Записан
ритт
Гость
Re: ГУИ. Навигационное дерево + редактирование объектов.
«
Ответ #14 :
Ноябрь 05, 2007, 16:19 »
класс модели как называется?
омг...только сейчас заметил
"для таблицы выбираешь рид-онли вьюху" имелось в виду "для таблицы выбираешь рид-онли модель"
«
Последнее редактирование: Ноябрь 05, 2007, 16:21 от xep
»
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...