Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Модель/Представление _ Опциональные поля в TableView

Автор: bo0blik 20.10.2009, 18:56

Всем привет!

К примеру, у меня есть таблица из трех столбцов, третий необязательный.

Мне нужно вместо значения в ячейке, отображать в третем столбце статусы: пуста ли ячейка.

Большое спасибо.

Автор: SABROG 20.10.2009, 19:06

Отображай, Qt как раз позволяет отображать.

Автор: bo0blik 20.10.2009, 19:14

Возможно, я не очень доступно выразил свою проблему.

Опишу подробней, у меня есть sql-таблица, ее я загружаю в tableview через модель, и хотелось бы на автомате обрабатывать и отображать нужные элементы, не изменяя при это модель.

Модель                            Отображение
id    name    text                id    name    text
1    test1    null                1    test1    Текст отсутвует
2    test2    ololo    =>         2    test2    Текст имеется
3    test3    null                3    test3    Текст отсутвует
4    test4    null                4    test4    Текст отсутвует

Автор: Litkevich Yuriy 20.10.2009, 20:05

А редактировать такую таблицу нужно?

Автор: bo0blik 20.10.2009, 20:18

Цитата(Litkevich Yuriy @ 20.10.2009, 20:05) *
А редактировать такую таблицу нужно?


Да, но через отдельный диалог.

Автор: Litkevich Yuriy 20.10.2009, 21:09

Цитата(bo0blik @ 21.10.2009, 0:18) *
Да, но через отдельный диалог.
тогда я бы использовал QSqlQueryModel, сформировал такой запрос, чтобы при не пустом (NULL) значении поля запрос возвращал бы один текст, а при пустом другой. (Оператор case можно использовать)

положим табличка MYTABLE, такая:
id | name   | status 
1  | Vas'ka | good
2  | Miha    | sleep
3  | crazy   | NULL


тогда запрос такой:
SELECT id, name, (case when status = ISNULL then "text Absent" else  "Text Presence" end) FROM MYTABLE

Автор: bo0blik 20.10.2009, 21:11

Litkevich Yuriy, а я и не знал что можно и такие запросы делать.

Но тем не мение такой метод не очень удобен, ибо могут возникнуть другие потребности, например иконка в ячейке, это уж таким запросом не уладишь.

Я думал что возможно в qt есть подобный обработчик отображения.

Автор: Litkevich Yuriy 20.10.2009, 21:13

См. моё сообщение (обновилось)

Автор: bo0blik 20.10.2009, 21:19

Цитата(Litkevich Yuriy @ 20.10.2009, 22:13) *
См. моё сообщение (обновилось)


И мое тоже :)

Автор: MoPDoBoPoT 20.10.2009, 21:20

Цитата(bo0blik @ 20.10.2009, 22:11) *
Я думал что возможно в qt есть подобный обработчик отображения.

Конечно можно. Отнаследоваться от QSqlQueryModel и переопределить метод data(const QModelIndex &item, int role) const

Автор: Litkevich Yuriy 20.10.2009, 21:26

Цитата(bo0blik @ 21.10.2009, 1:11) *
Я думал что возможно в qt есть подобный обработчик отображения.
а как ты видишь работу? Может и можно только я не пойму конечную цель. Вариантов реализации может быть много.

Автор: bo0blik 21.10.2009, 3:22

Цитата(Litkevich Yuriy @ 20.10.2009, 22:26) *
а как ты видишь работу? Может и можно только я не пойму конечную цель. Вариантов реализации может быть много.


Ну что-то вроде функции которая вешается, к примеру, на нужную колонку, в нее попадают данные, обрабатывают и выдаются нужные.

Автор: bo0blik 21.10.2009, 7:18

Решил с помощью QStyledItemDelegate

QString ImageStyle::displayText ( const QVariant & value, const QLocale & locale ) const
{
    if(value.toString().isEmpty())
        return "Нет картинки";
    else
        return "Есть картинка";
}


Довольно удобно, но как иконку добавить к надписи в данном случае?

Автор: Litkevich Yuriy 21.10.2009, 8:20

Цитата(bo0blik @ 21.10.2009, 11:18) *
но как иконку добавить к надписи в данном случае?
Обрати внимание на таблицу в описании этого класса, а именно на строку:
Qt::DecorationRole | QIcon and QColor

Автор: bo0blik 21.10.2009, 10:46

Цитата(Litkevich Yuriy @ 21.10.2009, 8:20) *
Обрати внимание на таблицу в описании этого класса, а именно на строку:
Qt::DecorationRole | QIcon and QColor


Да, да на таблицу я долго медитировал, но так и не понял как с этим свойством работать?

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)