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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в делегате не показывать строку?  (Прочитано 7474 раз)
majatu
Гость
« : Июнь 05, 2009, 13:03 »

Есть модель TableView . Привязн делегат. Как сделать так, чтобы определенная строка не показывалась? если не вызывать paint, то она просто пустая, а мне нужно, чтобы строки не было
Записан
ритт
Гость
« Ответ #1 : Июнь 05, 2009, 13:38 »

TableView - странное название для модели.
делегат тут ни при чём.
читать про прокси-модели.
Записан
roman.ks
Гость
« Ответ #2 : Июнь 10, 2009, 09:46 »

Чтобы скрыть строку см. в сторону QSortFilterProxyModel::filterAcceptsRow. Т.е. нужно создавать свой прокси. Вообще, прокси - штука очень мощная.
Записан
developer
Гость
« Ответ #3 : Июнь 10, 2009, 10:33 »

Код:
 
void DateTimeEditDelegate::paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
QStyleOptionViewItem opt = option;
QString text = index.data().toString();
        //Pseudokod
        if (text.contains("blah-blah"))
        {
               text = " ";
        }

        drawDisplay(painter, opt, opt.rect, text);
        drawFocus(painter, opt, opt.rect);
}
Записан
developer
Гость
« Ответ #4 : Июнь 10, 2009, 10:35 »

Забыл сказать, нужно свой делегат переопределить, и туда в метод paint добавить выше приведенный код.
Записан
spirit
Гость
« Ответ #5 : Июнь 10, 2009, 10:50 »

Забыл сказать, нужно свой делегат переопределить, и туда в метод paint добавить выше приведенный код.
в такм случае, проще все это делать в drawDisplay делегата и не лезть в paint, imho.
Записан
developer
Гость
« Ответ #6 : Июнь 10, 2009, 10:54 »

Цитировать
в такм случае, проще все это делать в drawDisplay делегата и не лезть в paint, imho.
Спасибо, хорошее замечание Улыбающийся
Записан
ритт
Гость
« Ответ #7 : Июнь 10, 2009, 11:14 »

ох и изврат...
Записан
spirit
Гость
« Ответ #8 : Июнь 10, 2009, 11:16 »

ох и изврат...
согласен, прокси модель -- это самое оно.
Записан
roman.ks
Гость
« Ответ #9 : Июнь 11, 2009, 10:53 »

Прокси модель и делегаты вообще-то для разных вещей предназначены.

Делегат - для отрисовки айтемов ( в данном примере )
Прокси - для того, чтобы вообще скрыть строку. Т.е. в случае делегата Вы не сможете скрыть строку.

Ну конечно же и делегаты и прокси не только для вышесказанного предназначены.

П.С. Скрыть это не означает "залить" ее белым :-)
Записан
mugabe
Гость
« Ответ #10 : Июнь 11, 2009, 11:04 »

Т.е. в случае делегата Вы не сможете скрыть строку.

Ну почему, можно в sizeHint вернуть QSize(0,0) Улыбающийся

Целесообразность этого - другой вопрос Улыбающийся
Записан
spirit
Гость
« Ответ #11 : Июнь 11, 2009, 11:08 »

Т.е. в случае делегата Вы не сможете скрыть строку.

Ну почему, можно в sizeHint вернуть QSize(0,0) Улыбающийся

Целесообразность этого - другой вопрос Улыбающийся
бррр, жесть.
Записан
ритт
Гость
« Ответ #12 : Июнь 11, 2009, 11:57 »

представляю фильтрацию строк на основе такого делегата...
...имеется 1К строк - нужно скрыть каждую нечётную Улыбающийся
Записан
Danila_Bagrofff
Гость
« Ответ #13 : Январь 10, 2012, 15:05 »

Хотелось бы уточнить...

У меня есть модель, есть набор данных, отображаемых в QTableView.
В зависимости от опций программы нужно отображать то одну часть данных, то другую.
Это необходимо делать только через proxy-модель?
Нельзя ли просто в модели сделать так, чтобы данная строка с данными не отображалась?
В data() и в headerData() легко для таких строк возвращать Variant(), но вот пустые строки все равно отображаются...
Может, можно как-то обойтись без прокси модели? Просто не отображать нужные строки.
Записан
andrew.k
Гость
« Ответ #14 : Январь 10, 2012, 15:56 »

А зачем без нее обходиться? Прокси-модель то что тебе нужно, на сколько я понял из этого хитрого треда)
А подменять данные в отрисовке это страшнее придумать нельзя было)

Плюс, если тебе действительно нужно подменять. На сколько я понимаю в прокси-модели можно переопределить метод data и уже в нем менять некоторые данные (которые нужно менять). Это если действительно нужно поле отображать пустым (типа строка пароля), а не скрыть строку целиком.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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