Название: Фильтрация повторяющихся значений Отправлено: sektor от Июль 25, 2016, 11:51 Добрый день. Есть модель QAbstractTableModel. Колонки модели вывожу в combobox. Теперь мне нужно, чтобы combobox не отображал повторяющие строки в столбце. Как это можно сделать ?
Название: Re: Фильтрация повторяющихся значений Отправлено: Bepec от Июль 25, 2016, 12:00 Удалить повторяющиеся данные из модели?
Название: Re: Фильтрация повторяющихся значений Отправлено: gil9red от Июль 25, 2016, 12:11 Поместить список колонок в множество QSet (http://doc.qt.io/qt-4.8/qset.html), множество не может содержать дубликаты.
Еще, комбобокс по-умолчанию не показывает дубликаты (http://doc.qt.io/qt-4.8/qcombobox.html#duplicatesEnabled-prop), правда там есть исключение, которые вы, наверное, нарушили Название: Re: Фильтрация повторяющихся значений Отправлено: sektor от Июль 25, 2016, 15:10 Цитировать Удалить повторяющиеся данные из модели? Нет мне нужно просто отобразить без повторений.Цитировать Поместить список колонок в множество QSet, множество не может содержать дубликаты. У меня duplicatesEnabled() в состоянии false. Я не знаю почему он отображает.Еще, комбобокс по-умолчанию не показывает дубликаты, правда там есть исключение, которые вы, наверное, нарушили вот кусок кода Код: DialogAbb::DialogAbb(QSqlRelationalTableModel* model, QWidget *parent) : Может как то с помощью прокси модели надо делать qsortfilterproxymodel ? Название: Re: Фильтрация повторяющихся значений Отправлено: kai666_73 от Июль 25, 2016, 16:42 Вангую дублирование данных в MyCatalog, то есть что-то вроде
RecordID DisplayText 1 Управление связи 2 Управление связи Название: Re: Фильтрация повторяющихся значений Отправлено: Bepec от Июль 25, 2016, 17:58 Конечно. Ведь ему он устанавливает модель.
А duplicatesEnabled не позволяет добавлять пользователю дублирующиеся строки. Но не мешает их добавлять программно. По сути вам надо отдавать в QComboBox недублированный список. А т.к. у вас каждая запись имеет индекс п/п, то каждая запись уникальна. PS берёте руки в ноги, пишете функцию удаления дубликатов и вставляете в QComboBox. А то ишь чего захотели :D Название: Re: Фильтрация повторяющихся значений Отправлено: kai666_73 от Июль 25, 2016, 21:32 Мелко плаваете Верес )
Тут скорее проблема с проектированием БД - ТС-у же скорее всего и RecordId из модели понадобится... Название: Re: Фильтрация повторяющихся значений Отправлено: sektor от Июль 25, 2016, 21:35 Цитировать По сути вам надо отдавать в QComboBox недублированный список. А т.к. у вас каждая запись имеет индекс п/п, то каждая запись уникальна. PS берёте руки в ноги, пишете функцию удаления дубликатов и вставляете в QComboBox. А то ишь чего захотели Веселый А, нельзя создать промежуточную модель, удалить дублирующие строки, и промежуточную модель передать в combobox? Если кончено можно это сделать с помощью сортировки. Название: Re: Фильтрация повторяющихся значений Отправлено: sektor от Июль 25, 2016, 21:37 Цитировать Мелко плаваете Верес ) И какую проблему ты видишь ?Тут скорее проблема с проектированием БД - ТС-у же скорее всего и RecordId из модели понадобится... Название: Re: Фильтрация повторяющихся значений Отправлено: Bepec от Июль 25, 2016, 23:34 Какая разница что делать. Ему всё равно придётся этот список выдирать откуда то. Толи из базы, пусть и плохо, но спроектированной, пусть из модели, пусть из прокси модели.
Так мб проще захреначить sql запрос, в нём дули удалить нафиг и запихать в комбобокс? Так будет проще и спокойнее всем, и бд останется стоять и модель не понадобится. Название: Re: Фильтрация повторяющихся значений Отправлено: kai666_73 от Июль 25, 2016, 23:51 Цитировать Мелко плаваете Верес ) И какую проблему ты видишь ?Тут скорее проблема с проектированием БД - ТС-у же скорее всего и RecordId из модели понадобится... Мы с Вересом может и переругиваемся, но все-таки на вы ) Проблема, собственно, в том что 1. Таблица(ы) не нормализована(ы) 2. Вытекает из первой, подробнее: вот заполните вы все поля в диалоге, сделаете сабмит, далее вам надо что-то в базу записать; по хорошему это должен быть ID, а не текстовое поле, но из приведенного мною примера это 1 или 2? Название: Re: Фильтрация повторяющихся значений Отправлено: Bepec от Июль 26, 2016, 00:04 Тут сначала надо понять, что важнее. Быстро сделать, или привести всё в порядок. Можно ли трогать бд, или нельзя (мб там ещё десяток приложений пользует, все переписывать эт заппц). Или сделать переходный вариант в виде связанной новой таблицы, правильно спроектированной :)
PS вон работает http сервер на делфи, под ватчером на Qt, дырки в котором затыкаются при помощи инжекта dll и перезаписи памяти процесса, перезапускается раз в 2 дня. (каюсь, ватчер делал я) Но чтоб это привести всё в порядок, нужно минимум месяца 4 и бюджет. А можно ватчер написать за день и оно будет пыхтеть :D Название: Re: Фильтрация повторяющихся значений Отправлено: kai666_73 от Июль 26, 2016, 00:26 Безусловно, контекст важен...
Тут, скорее, было спрошено - было отвечено ) Название: Re: Фильтрация повторяющихся значений Отправлено: sektor от Июль 26, 2016, 07:19 Цитировать Мы с Вересом может и переругиваемся, но все-таки на вы ) Проблема, собственно, в том что 1. Таблица(ы) не нормализована(ы) 2. Вытекает из первой, подробнее: вот заполните вы все поля в диалоге, сделаете сабмит, далее вам надо что-то в базу записать; по хорошему это должен быть ID, а не текстовое поле, но из приведенного мною примера это 1 или 2? Да, извините погорячился. Запись в БД уже реализована. Все поля в диалоговом окне записываются в БД. БД настроена так, что ключ ID строки БД присваивает автоматом. БД у меня реляционная. Я хотел пользователю ПО предоставить удобство ввода. Если в колонке уже вводилось значение, чтобы в combobox эти значения отображались. Но проблема в дубликатах. Название: Re: Фильтрация повторяющихся значений Отправлено: sektor от Июль 26, 2016, 07:22 Цитировать Тут сначала надо понять, что важнее. Быстро сделать, или привести всё в порядок. Можно ли трогать бд, или нельзя (мб там ещё десяток приложений пользует, все переписывать эт заппц). Или сделать переходный вариант в виде связанной новой таблицы, правильно спроектированной Улыбающийся PS вон работает http сервер на делфи, под ватчером на Qt, дырки в котором затыкаются при помощи инжекта dll и перезаписи памяти процесса, перезапускается раз в 2 дня. (каюсь, ватчер делал я) Но чтоб это привести всё в порядок, нужно минимум месяца 4 и бюджет. А можно ватчер написать за день и оно будет пыхтеть Веселый подскажите как правильнее будет, все проектируется с нуля я могу изменить все и БД тоже. Важнее, чтобы перевести все в порядок. Название: Re: Фильтрация повторяющихся значений Отправлено: Bepec от Июль 26, 2016, 10:15 Ну тогда у вас проблема в добавлении значений в таблицу. Вообще по идее надо поставить флаг уникальности на текстовое поле. Вам же не нужна таблица заполненная дубликатами.
Ну и тогда ваша проблема, приведённая в этой теме просто исчезнет. PS без точного знания тз что-то приводить в порядок невозможно. А тут уже накладывается лень и нежелание забивать левой инфой мозг :D Название: Re: Фильтрация повторяющихся значений Отправлено: sektor от Июль 26, 2016, 11:37 Цитировать Ну тогда у вас проблема в добавлении значений в таблицу. Вообще по идее надо поставить флаг уникальности на текстовое поле. Вам же не нужна таблица заполненная дубликатами. Ну и тогда ваша проблема, приведённая в этой теме просто исчезнет. PS без точного знания тз что-то приводить в порядок невозможно. А тут уже накладывается лень и нежелание забивать левой инфой мозг  Опять не правильно поняли. У меня в таблице будут дубликаты например: как на скрине "управление связи". Она в таблице может 1000 раз повторятся. А в combobox e я хочу его видеть 1 раз. Это делается для удобства, пользователь вводит значение в редактируемый combobox а combobox дописывает если такое значение вводилась раньше или показывает схожий вариант. Название: Re: Фильтрация повторяющихся значений Отправлено: kai666_73 от Июль 26, 2016, 12:28 Цитировать Ну тогда у вас проблема в добавлении значений в таблицу. Вообще по идее надо поставить флаг уникальности на текстовое поле. Вам же не нужна таблица заполненная дубликатами. Ну и тогда ваша проблема, приведённая в этой теме просто исчезнет. PS без точного знания тз что-то приводить в порядок невозможно. А тут уже накладывается лень и нежелание забивать левой инфой мозг  Опять не правильно поняли. У меня в таблице будут дубликаты например: как на скрине "управление связи". Она в таблице может 1000 раз повторятся. А в combobox e я хочу его видеть 1 раз. Это делается для удобства, пользователь вводит значение в редактируемый combobox а combobox дописывает если такое значение вводилась раньше или показывает схожий вариант. Да нет же, это вы не правильно поняли. Вам нужна дополнительная таблица-справочник, типа MyDepartaments DEPT_ID DESCR 1 Управление связи 2 Логистика ....... А в таблицу MyCatalog необходимо поместить колонку DEPT_ID вместо DisplayText (так называемый внешний ключ на DEPT_ID из MyDepartaments). Соответственно, модель для комбо брать из MyDepartaments. Если пользователь ввел новое значение в комбо, то помимо прочих действий при сабмите диалога необходимо будет добавлять новую запись в MyDepartaments. Ну, по крайней мере, я бы выбрал именно такую реализацию. Название: Re: Фильтрация повторяющихся значений Отправлено: Bepec от Июль 26, 2016, 14:16 Бредово.
ТС вы хотите уникальности значения, в неуникальной таблице с возможностью добавления неуникальных значений. Вы уж, ей богу, определитесь что за фигня у вас там в базе творится. PS уже давно б сделали список уникальных значений из sql запроса и засунули в комбобокс. Ан нет, чуда ждут. Название: Re: Фильтрация повторяющихся значений Отправлено: sektor от Июль 26, 2016, 16:39 Цитировать Да нет же, это вы не правильно поняли. Вам нужна дополнительная таблица-справочник, типа Да делал я так тоже. Ладно буду разбираться спасибо всем.MyDepartaments DEPT_ID DESCR 1 Управление связи 2 Логистика ....... А в таблицу MyCatalog необходимо поместить колонку DEPT_ID вместо DisplayText (так называемый внешний ключ на DEPT_ID из MyDepartaments). Соответственно, модель для комбо брать из MyDepartaments. Если пользователь ввел новое значение в комбо, то помимо прочих действий при сабмите диалога необходимо будет добавлять новую запись в MyDepartaments. Цитировать PS уже давно б сделали список уникальных значений из sql запроса и засунули в комбобокс. Ан нет, чуда ждут. Да... точно пора уже действовать |