Russian Qt Forum
Ноябрь 23, 2024, 20:20
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
2 таблицы на 1 модель или как?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: 2 таблицы на 1 модель или как? (Прочитано 7508 раз)
djfile
Гость
2 таблицы на 1 модель или как?
«
:
Декабрь 28, 2011, 19:58 »
Добрый вам, сообщество! Надеюсь, что подходящая ветка.
Интерфейс пользователя должен состоять из двух таблиц: в одной собственно данные, подлежащие обработке, а в другой критерии обработки. i-й столбец первой таблицы, обрабатывается по критериям, заданным в i-м столбце второй таблицы. На выходе получаем таблицу, после отбора.
Вот такие вопросы:
1) Как связать данные с первой таблицы, с критериями из второй? Есть идея для обоих таблиц установить одну модель, но каждая таблица будет менять только свою часть модели. Но не могу в голове уложить КАК это сделать?
2) Во второй таблице в первой строке должен быть чекбокс (участвует ли этот столбец в отборе), во второй выпадающий список (тип данных: число или текст, чтобы знать по каким правилам обрабатывать этот столбец) и третья строка в зависимости от того, число или текст выбран предыдущий параметр, должно принимать либо неравенство вида k1 < x < k2, либо для текста x = {какое-то множество слов}. В примерах находил только как целому столбцу подменяют виджет на спинбокс, а мне надо чуть ли не каждой ячейке свой виджет устанавливать + динамически менять ячейку условия.
Если у кого-то есть идеи сделать интерфейс проще и удобнее, то с радостью соглашусь.
P.S. В Qt недавно.
Записан
andrew.k
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #1 :
Декабрь 28, 2011, 21:47 »
лучше один раз увидеть, чем сто раз услышать.
Нарисовал бы эскиз того, что хочешь получить.
Записан
djfile
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #2 :
Декабрь 28, 2011, 22:40 »
Вот примерно так.
Только в реале будут вводиться различный физические данные, по критериям в нижней таблице составляется нормирующая функция и по нормирующей функции ищем оптимальную строку.
Я тут накопал про Filter Model, но всё ещё точно определился куда двигаться.
Записан
andrew.k
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #3 :
Декабрь 28, 2011, 23:31 »
примерно как?
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: 2 таблицы на 1 модель или как?
«
Ответ #4 :
Декабрь 29, 2011, 06:45 »
Вот так у него написано:
http://imagepost.ru/images/p/rm/prmwqbwjaafrnnxvrbybbsxjmyarqs.png
Записан
andrew.k
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #5 :
Декабрь 29, 2011, 08:19 »
Цитата: LisandreL от Декабрь 29, 2011, 06:45
Вот так у него написано:
http://imagepost.ru/images/p/rm/prmwqbwjaafrnnxvrbybbsxjmyarqs.png
У меня не открывается.
403 Forbidden
Записан
djfile
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #6 :
Декабрь 29, 2011, 09:48 »
У меня все ок. Вот на радикале:
Записан
Tonal
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #7 :
Декабрь 29, 2011, 10:39 »
Тут всяко 2 составляющие, стало быть и 2 модели.
1я - модель для данных.
2я - модель для условий.
Из первой можно состав и типы полей разве что зацепить а из въюхи их размеры.
А уж потом, как фильтр на первую накладывать - вовсе отдельное действие.
Можно SQL изменить, можно в QSortFilterProxyModel отработать filterAcceptsRow или свойствами поиграться...
Записан
djfile
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #8 :
Декабрь 29, 2011, 11:15 »
Почитав доки, пришёл к выводу, что для первой таблицы создаю свою модель (от чего лучше наследовать?) и для второй. В принципе модели должны получиться элементарные. Дальше создаю наследника QSortFilterProxyModel, в который как-то передаю первую и вторую модель. Дальше совсем ступор... Мне нужно сначала пройти по всем столбцам, которые участвуют в отборе и применить к ним нормирующую функцию. После этого я получу матрицу с элементами [0..1]. Дальше прохожу уже по строкам, ища ту, у которой нормирующие коэффициенты лучше, чем у других. Найдя такую(или такие, если они равнозначны), я должен их либо подсветить в исходной таблице, либо вывести их в отдельной.
Записан
djfile
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #9 :
Декабрь 29, 2011, 16:23 »
Цитата: Tonal от Декабрь 29, 2011, 10:39
Тут всяко 2 составляющие, стало быть и 2 модели.
1я - модель для данных.
2я - модель для условий.
Из первой можно состав и типы полей разве что зацепить а из въюхи их размеры.
А уж потом, как фильтр на первую накладывать - вовсе отдельное действие.
Можно SQL изменить, можно в QSortFilterProxyModel отработать filterAcceptsRow или свойствами поиграться...
Забыл на рисунке нарисовать... В таблице условий ещё + идеальное значение и погрешность.
Боюсь, что filterAcceptsRow мне никак не подойдет. Её хорошо использовать когда нужно просто выкинуть из начальной модели те элементы, которые однозначно не подходят по условиям. Мне это можно использовать, но только а самом начале всей математики.
«
Последнее редактирование: Декабрь 29, 2011, 16:47 от djfile
»
Записан
Tonal
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #10 :
Декабрь 30, 2011, 08:17 »
Т. е. е тебя получается 3 модели:
1. Модель с данными - ДМ (DataModel)
2. Модель для фильтрации сортировки данных СФПМ (наследник QSortFilterProxyModel)
3. Модель для задания условий фильтрации/отображения/сортировки СФМ (BuildFilterModel)
СФПМ всегда работает поверх ДМ.
Когда критерии не заданы - отображаются все строки.
Когда критерии заданы они передаются в СФПМ и отображаются только те строки, которые попадают под них (filterAcceptsRow).
Ежели тебе нужно ещё и дополнительно расцветить, то в СФПМ можно перехватить ещё и data(...) - возвращать цвет/шрифт.
Или вовсе декоратора какого забильбенить ежели сложное чаво.
Записан
djfile
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #11 :
Декабрь 30, 2011, 19:33 »
QSortFilterProxyModel не подойдет, так как он при фильтрации рассматривает отдельную строку или отдельный столбец, вне зависимости от остальных строк, а в зависимости от условий отбора. У меня же каждая строка зависит от других строк.
На прог орге такую же тему поднял, но там вообще ещё даже близко дельного ничего не сказали. Спасибо Вам, что хоть тут предлагают какие-то вещи.
Скопипастю один из моих ответов с прог орга, может станет чуть понятнее:
К SQL это дело вообще никакого отношения не имеет. То что я привел это только для примера. Пользователь сам будет забивать необходимые ему данные. Смысл программы в том, что она поможет выбрать правильное решение, точнее оптимальное. Например, у вас есть много способов провести физический эксперимент, но один дороже, другой точнее, третий быстрее по времени и тд. Все эти свойства мы отображаем в столбцах первой таблицы. При этом мы знаем, что у нас бюджет ограничен, время тоже и тп, то есть мы знаем пределы и их пишем во вторую таблицу. И вот мы хотим найти тот вариант, который для нас будет оптимальным. Но так как мы не можем сравнивать время и деньги, мы сначала нормируем все данные, а потом уже с ними работаем и по ним находим оптимальную строку.
Вся основная математика у меня есть. Нужно только реализовать удобную работу с таблицами, сделать защиту от "дурака", связать данные из первой таблицы с ограничениями из второй и получить результат.
Записан
andrew.k
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #12 :
Декабрь 30, 2011, 20:11 »
Цитата: djfile от Декабрь 30, 2011, 19:33
На прог орге такую же тему поднял, но там вообще ещё даже близко дельного ничего не сказали. Спасибо Вам, что хоть тут предлагают какие-то вещи.
А по твоему мнению "на прог орге" это где?
Записан
djfile
Гость
Re: 2 таблицы на 1 модель или как?
«
Ответ #13 :
Декабрь 31, 2011, 09:27 »
Извините. Конец года уже с ума сводит=) И бегаю, между этими двумя закладками, как бешеный уже. На кроссплатформе конечно.
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...