Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QTableView + QSqlTableModel + checkbox


Автор: Alca 10.11.2012, 23:51
Хочу булевое поле из БД отображать как чекбокс.
Что-то на эту тему ни чего подходящего не нагуглил.

Автор: loneybibi 11.11.2012, 04:05
Цитата(Alca @ 10.11.2012,  22:51)
Хочу булевое поле из БД отображать как чекбокс.
Что-то на эту тему ни чего подходящего не нагуглил.

Используйте делегаты для QTableView. В демо Qt есть много примеров, что то похожее там было. Поищите в гугл про делегаты QStyledItemDelegate.

Схема будет приблизительно такой:
-Создать класс на основе QStyledItemDelegate
-Переопределить событие paint() этого класса
-В переопределенном событии paint() отрисовать QCheckBox в ячейке

Потом установить этот касс как делегат для определенной колонки таблицы.

Автор: Alca 12.11.2012, 00:13
а что делать с QSqlTableModel ?

Вот сам проект: https://bitbucket.org/skynowa/iteacher/src

Автор: loneybibi 12.11.2012, 01:22
Цитата(Alca @ 11.11.2012,  23:13)
а что делать с QSqlTableModel ?

Вот сам проект: https://bitbucket.org/skynowa/iteacher/src

для того что бы отображать вместо bool значения checkbox нужно создать делегат и установить его для таблицы! трогать модель вообще не нужно!

могу дать пример простого делегата с текстом, другие я не делал, но примеров встроенных в Qt много, посмотрите!
Код

class mDelegate:public QStyledItemDelegate{
    Q_OBJECT
public:
    mDelegate(QWidget *parent=0):QStyledItemDelegate(parent){}

    QString displayText(const QVariant &value, const QLocale &locale) const{
        QString mytxt="MY TEXT";
        return mytext;
    }
};


Использовать так:
Код

ui->tableView->setItemDelegateForColumn(9,new mDelegate);


Используйте класс QStyledItemDelegate! у этого класса просто переопределяются события состояний когда он находиться
в режиме простого отображения и редактирования, вместо них подставляете свои виджеты.

По этому поводу очень много документации на русском языке.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)