Russian Qt Forum
Ноябрь 24, 2024, 16:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Фильтрация повторяющихся значений  (Прочитано 10267 раз)
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« : Июль 25, 2016, 11:51 »

Добрый день. Есть модель QAbstractTableModel. Колонки модели вывожу в combobox. Теперь мне нужно, чтобы combobox не отображал повторяющие строки в столбце. Как это можно сделать ?
Записан
Bepec
Гость
« Ответ #1 : Июль 25, 2016, 12:00 »

Удалить повторяющиеся данные из модели?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Июль 25, 2016, 12:11 »

Поместить список колонок в множество QSet, множество не может содержать дубликаты.
Еще, комбобокс по-умолчанию не показывает дубликаты, правда там есть исключение, которые вы, наверное, нарушили
Записан

sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #3 : Июль 25, 2016, 15:10 »

Цитировать
Удалить повторяющиеся данные из модели?
Нет мне нужно просто отобразить без повторений.

Цитировать
Поместить список колонок в множество QSet, множество не может содержать дубликаты.
Еще, комбобокс по-умолчанию не показывает дубликаты, правда там есть исключение, которые вы, наверное, нарушили
У меня duplicatesEnabled() в состоянии false. Я не знаю почему он отображает.

вот кусок кода
Код:
DialogAbb::DialogAbb(QSqlRelationalTableModel* model, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogAbb)
{

    ui->setupUi(this);
    //model->submit();


    ui->name_2->setModel(model); //модель примерно такая "SELECT RecordID, DisplayText FROM MyCatalog;"
    ui->name_2->setModelColumn(1); // Колонка для отображения текста

Может как то с помощью прокси модели надо делать qsortfilterproxymodel ?
« Последнее редактирование: Июль 25, 2016, 15:33 от gasan_333 » Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #4 : Июль 25, 2016, 16:42 »

Вангую дублирование данных в MyCatalog, то есть что-то вроде

RecordID      DisplayText
1                 Управление связи
2                 Управление связи
Записан
Bepec
Гость
« Ответ #5 : Июль 25, 2016, 17:58 »

Конечно. Ведь ему он устанавливает модель.
А duplicatesEnabled не позволяет добавлять пользователю дублирующиеся строки. Но не мешает их добавлять программно.

По сути вам надо отдавать в QComboBox недублированный список. А т.к. у вас каждая запись имеет индекс п/п, то каждая запись уникальна.

PS берёте руки в ноги, пишете функцию удаления дубликатов и вставляете в QComboBox. А то ишь чего захотели Веселый
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #6 : Июль 25, 2016, 21:32 »

Мелко плаваете Верес )
Тут скорее проблема с проектированием БД - ТС-у же скорее всего и RecordId из модели понадобится...
Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #7 : Июль 25, 2016, 21:35 »

Цитировать
По сути вам надо отдавать в QComboBox недублированный список. А т.к. у вас каждая запись имеет индекс п/п, то каждая запись уникальна.

PS берёте руки в ноги, пишете функцию удаления дубликатов и вставляете в QComboBox. А то ишь чего захотели Веселый

А, нельзя создать промежуточную модель, удалить дублирующие строки, и промежуточную модель передать в combobox?
Если кончено можно это сделать с помощью сортировки.
Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #8 : Июль 25, 2016, 21:37 »

Цитировать
Мелко плаваете Верес )
Тут скорее проблема с проектированием БД - ТС-у же скорее всего и RecordId из модели понадобится...
И какую проблему ты видишь ?
Записан
Bepec
Гость
« Ответ #9 : Июль 25, 2016, 23:34 »

Какая разница что делать. Ему всё равно придётся этот список выдирать откуда то. Толи из базы, пусть и плохо, но спроектированной, пусть из модели, пусть из прокси модели.
Так мб проще захреначить sql запрос, в нём дули удалить нафиг и запихать в комбобокс? Так будет проще и спокойнее всем, и бд останется стоять и модель не понадобится.
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #10 : Июль 25, 2016, 23:51 »

Цитировать
Мелко плаваете Верес )
Тут скорее проблема с проектированием БД - ТС-у же скорее всего и RecordId из модели понадобится...
И какую проблему ты видишь ?

Мы с Вересом может и переругиваемся, но все-таки на вы )
Проблема, собственно, в том что
1. Таблица(ы) не нормализована(ы)
2. Вытекает из первой, подробнее:
  вот заполните вы все поля в диалоге, сделаете сабмит, далее вам надо что-то в базу записать; по хорошему это должен быть ID, а не текстовое поле, но из приведенного мною примера это 1 или 2?
Записан
Bepec
Гость
« Ответ #11 : Июль 26, 2016, 00:04 »

Тут сначала надо понять, что важнее. Быстро сделать, или привести всё в порядок. Можно ли трогать бд, или нельзя (мб там ещё десяток приложений пользует, все переписывать эт заппц). Или сделать переходный вариант в виде связанной новой таблицы, правильно спроектированной Улыбающийся

PS вон работает http сервер на делфи, под ватчером на Qt, дырки в котором затыкаются при помощи инжекта dll и перезаписи памяти процесса, перезапускается раз в 2 дня. (каюсь, ватчер делал я) Но чтоб это привести всё в порядок, нужно минимум месяца 4 и бюджет. А можно ватчер написать за день и оно будет пыхтеть Веселый
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #12 : Июль 26, 2016, 00:26 »

Безусловно, контекст важен...

Тут, скорее, было спрошено - было отвечено )
Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #13 : Июль 26, 2016, 07:19 »

Цитировать
Мы с Вересом может и переругиваемся, но все-таки на вы )
Проблема, собственно, в том что
1. Таблица(ы) не нормализована(ы)
2. Вытекает из первой, подробнее:
  вот заполните вы все поля в диалоге, сделаете сабмит, далее вам надо что-то в базу записать; по хорошему это должен быть ID, а не текстовое поле, но из приведенного мною примера это 1 или 2?

Да, извините погорячился.

Запись в БД уже реализована. Все поля в диалоговом окне записываются в БД. БД настроена так, что ключ ID  строки БД присваивает автоматом. БД у меня реляционная. Я хотел пользователю ПО предоставить удобство ввода. Если в колонке уже вводилось значение, чтобы в combobox эти значения отображались. Но проблема в дубликатах. 
Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #14 : Июль 26, 2016, 07:22 »

Цитировать
Тут сначала надо понять, что важнее. Быстро сделать, или привести всё в порядок. Можно ли трогать бд, или нельзя (мб там ещё десяток приложений пользует, все переписывать эт заппц). Или сделать переходный вариант в виде связанной новой таблицы, правильно спроектированной Улыбающийся

PS вон работает http сервер на делфи, под ватчером на Qt, дырки в котором затыкаются при помощи инжекта dll и перезаписи памяти процесса, перезапускается раз в 2 дня. (каюсь, ватчер делал я) Но чтоб это привести всё в порядок, нужно минимум месяца 4 и бюджет. А можно ватчер написать за день и оно будет пыхтеть Веселый

подскажите как правильнее будет, все проектируется с нуля я могу изменить все и БД тоже.  Важнее, чтобы перевести все в порядок.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.14 секунд. Запросов: 23.