Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 2 таблицы на 1 модель или как?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
djfile
Добрый вам, сообщество! Надеюсь, что подходящая ветка.
Интерфейс пользователя должен состоять из двух таблиц: в одной собственно данные, подлежащие обработке, а в другой критерии обработки. i-й столбец первой таблицы, обрабатывается по критериям, заданным в i-м столбце второй таблицы. На выходе получаем таблицу, после отбора.

Вот такие вопросы:

1) Как связать данные с первой таблицы, с критериями из второй? Есть идея для обоих таблиц установить одну модель, но каждая таблица будет менять только свою часть модели. Но не могу в голове уложить КАК это сделать?

2) Во второй таблице в первой строке должен быть чекбокс (участвует ли этот столбец в отборе), во второй выпадающий список (тип данных: число или текст, чтобы знать по каким правилам обрабатывать этот столбец) и третья строка в зависимости от того, число или текст выбран предыдущий параметр, должно принимать либо неравенство вида k1 < x < k2, либо для текста x = {какое-то множество слов}. В примерах находил только как целому столбцу подменяют виджет на спинбокс, а мне надо чуть ли не каждой ячейке свой виджет устанавливать + динамически менять ячейку условия.

Если у кого-то есть идеи сделать интерфейс проще и удобнее, то с радостью соглашусь.

P.S. В Qt недавно.
BlueIceScream
Какие именно виды обработок? Связаны ли они с изменениями данных в модели, либо только с их представлением?
djfile
Вот набросал интерфейс:

В таблице условий ещё + идеальное значение и погрешность.

Обработка заключается в составлении нормированной матрицы, то есть если в таблице условий включен чекбокс и выбраны условия, то для каждой ячейки столбца применяем нормирующую функцию по этим условиям. В итоге получим матрицу с элементами [0..>1]. Где, если в ячейке 0, то она идеально подходит по нашим условиям, 0 < x < 1 - подходит по условиям, но не идеально, x >= 1 - не подходит по условиям вообще. Дальше выбираем ту строку(или строки, так как можем найти равнозначную, но у неё какой-то параметр будет чуть лучше, а какой-то хуже), которая по всем параметрам будет наилучшей. Этой строке соответствует строка из начальных данных. Вот начальную строку как-то выделяем, выводим в отдельном окне, пока что неважно=)
Steklova Olga
Если у Вас в первой таблице в первом столбце отображается поле таблицы БД, описанное, например, как текстовое, то зачем делать во второй таблице в первом столбце ВЫПАДАЮЩИЙ СПИСОК с разными типами данных? Вы что, собираетесь текстовое поле обрабатывать не как текст?
И много у Вас столбцов намечается в таблице?
djfile
Текст как число конечно нельзя обработать, зато число как строку можно, при том результат необязательно будет таким же. Пример в лоб: '01' == '1', для числа это будет true, для строки false.

Количество столбцов может достигать десятков и сотен. Строк также.
Steklova Olga
И как Вы собираетесь к одной модели подключить данные из двух разных таблиц БД, если в первой первичный ключ = номеру товара, а во второй - номеру поля первой таблицы?
djfile
Вы немножко не так поняли или я не так объяснил=)
К SQL это дело вообще никакого отношения не имеет. То что я привел это только для примера. Пользователь сам будет забивать необходимые ему данные. Смысл программы в том, что она поможет выбрать правильное решение, точнее оптимальное. Например, у вас есть много способов провести физический эксперимент, но один дороже, другой точнее, третий быстрее по времени и тд. Все эти свойства мы отображаем в столбцах первой таблицы. При этом мы знаем, что у нас бюджет ограничен, время тоже и тп, то есть мы знаем пределы и их пишем во вторую таблицу. И вот мы хотим найти тот вариант, который для нас будет оптимальным. Но так как мы не можем сравнивать время и деньги, мы сначала нормируем все данные, а потом уже с ними работаем и по ним находим оптимальную строку.

Вся основная математика у меня есть. Нужно только реализовать удобную работу с таблицами, сделать защиту от "дурака", связать данные из первой таблицы с ограничениями из второй и получить результат.
FantasyOr
я использую для мультисортировки(по нескольким столбцам одновременно) таблиц компонентой QxtSortFilterProxyModel библиотека Qxt это модель промежуточная между моделью содержащей данные и отображением. Советую скачать её и допилить т.к. она(QxtSortFilterProxyModel) фильтрует только по 100% совпадению.
1) скачиваете и устанавливаете Qxt;
2) разбираетесь с QxtSortFilterProxyModel;
3) исследуетесь от QxtSortFilterProxyModel и допиливаете свои фишки;
4) соединяете dataTableView->( MySortFilterProxyModel->( dataTableModel ) )
filterTableView->( filterTableModel )
connect( filterTableModel ,SIGNAL( изменилисьДанные( индекс и данные ) ), MySortFilterProxyModel, SLOT( установитьФильтр( индекс и данные) ) )
5) не забываем в 3 пункте описать и реализовать слот установитьФильтр( индекс и данные) в классе MySortFilterProxyModel


примерно такой рецепт, если у Вас получится хорошо, не жадничайте поделитесь, Все скажут Вам спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.