Russian Qt Forum
Июля 04, 2025, 19:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: фильтрация по иконкам  (Прочитано 8198 раз)
helga1917
Гость
« : Августа 12, 2013, 13:12 »

У меня есть таблица QSortFilterProxyModel в одной из колонок таблицы иконки (в формате png) обозначающие тип сообщений. Как можно сделать фильтрацию по определенному типу иконок?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Августа 12, 2013, 13:25 »

введи какой-нибудь строковый идентификатор, например имя файла
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
helga1917
Гость
« Ответ #2 : Августа 12, 2013, 13:54 »

не происходит фильтрация
Код:
Window::Window
{
proxyModel = new QSortFilterProxyModel (this);

filterButton = new QPushButton;
connect (filterButton, SIGNAL(clicked()), this, SLOT(setFilterType()));
}
void Window::setFiltertype()
{
proxyModel->setFilterRole(1);
QRegExp regExp("C:/1.png");
proxyModel->setFilterRegExp(regExp);
}

Записан
mutineer
Гость
« Ответ #3 : Августа 12, 2013, 15:51 »

а что у тебя возвращается по первой роли?
Кстати, а модель фильтру ты указала?
Записан
mutineer
Гость
« Ответ #4 : Августа 12, 2013, 16:19 »

Иконка со строкой просто не сравнивается. Заведи отдельную роль с типом записи и по ней фильтруй
Записан
helga1917
Гость
« Ответ #5 : Августа 16, 2013, 14:07 »

Цитировать
а что у тебя возвращается по первой роли?
proxyModel->setFilterRole(Qt::DecorationRole);

Цитировать
Кстати, а модель фильтру ты указала?
Заведи отдельную роль с типом записи и по ней фильтруй
Не понимаю, что это значит?
Как указать модель фильтру? Как завести роль с типом записи?
Записан
mutineer
Гость
« Ответ #6 : Августа 16, 2013, 14:17 »

Ок, какой тип у тебя возвращается по роли Qt::DecorationRole? QImage?

proxyModel->setModel() делала?

В data() методе модели по запросу какой-нить своей роли возвращай тип записи.
proxyModel->setFilterRole(<тут укажешь свою роль>);
Записан
helga1917
Гость
« Ответ #7 : Августа 16, 2013, 14:44 »

Возвратить надо QPixmap.
Цитировать
proxyModel->setModel() делала?
да, это есть
Цитировать
В data() методе модели по запросу какой-нить своей роли возвращай тип записи.
Тут немного не понятно: возвращает тип записи или данные?
Записан
mutineer
Гость
« Ответ #8 : Августа 16, 2013, 14:51 »

QPixmap с QString не сравнивается, поэтому и не получится фильтрации

Данные, которые бы обозначали тип записи. Например enum или просто int, по которому можно отфильтровать
Записан
helga1917
Гость
« Ответ #9 : Августа 20, 2013, 10:18 »

А как правильно реализовать саму фильтрацию по идентификатору?
если, допустим, создать идентификатор QString  id
main:
Код:
void addMail(QAbstractItemModel *model, const QString id, const QPixmap Pix,
                  const QDateTime &date, const QString &info)
{model->setData(model->index(0,0),id, 3);              //идентификатор, 3 роль ToolTipRole(если прописать тут 0,
                                                                        // то фильтрует, но тогда id отображается на форме)
model->setData(model->index(0,0),Pix,1);            //иконка
model->setData(model->index(0,1),date);            //время
model->setData(model->index(0,2),info);             //текст сообщения
}
QAbstractItemModel *createMailModel (QObject *parent)
{QStandardItemModel *model2 = new StandardItemModel (0,3, parent);

QPixmap *pixCrash = new QPixmap ("crash.png");
QPixmap *pixAtt = new QPixmap ("att.png");

addMail (model2, "1", *pixCrash, QDateTime(QDate(2013,12,23),QTime(17,03)), QObject::tr("Сообщение"));
addMail (model2, "2", *pixAtt, QDateTime(QDate(2013,12,23),QTime(17,03)), QObject::tr("Сообщение"));
return model2;
}

Код:
void Window::iconFilter()
{
proxyModel-> setFilterRegExp(QRegExp ("1")); //фильтр "не видит" id
}
Как фильтровать по элементам модели, которые не видимы на форме?
« Последнее редактирование: Августа 20, 2013, 10:43 от helga1917 » Записан
mutineer
Гость
« Ответ #10 : Августа 20, 2013, 10:26 »

setFilterRole(3)
Записан
helga1917
Гость
« Ответ #11 : Августа 20, 2013, 10:38 »

прописала так, но не срабатывает
Код:
void Window::iconFilter()
{
proxyModel->setFilterRole(3);
proxyModel-> setFilterRegExp(QRegExp ("1")); //фильтр "не видит" id
}
« Последнее редактирование: Августа 20, 2013, 10:40 от helga1917 » Записан
mutineer
Гость
« Ответ #12 : Августа 20, 2013, 10:40 »

что значит "фильтр не видит id"?
Почему у тебя скобки нехватает второй раз уже?
Записан
helga1917
Гость
« Ответ #13 : Августа 20, 2013, 10:43 »

скобку исправила, это опечатка

когда у меня id по 0 роли, видим на форме фильтр срабатывает,
а когда id по 3 роли, невидим на форме фильтр не срабатывает
Записан
mutineer
Гость
« Ответ #14 : Августа 20, 2013, 10:44 »

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


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