Название: QtableView разноцветные строки и Checkbox в одной из колонок
Отправлено: aasavelev от Февраль 07, 2015, 17:15
Здравствуйте. подскажите как можно реализовать чтоб необходимые мне строки были закрашены каким-нибудь цветом. А также в одyой из колонок был CheckBox, при установки значения в истину строка должна оставить белой если ложь, то строка должна быть например серой? CheckBox Установить в колонку знаю как, но не знаю как связать изменение состояния CheckBox с раскраской строки и изменение значения в таблице(к которой привязан QtableView). #include "checkboxdelegate.h"
CheckBoxDelegate::CheckBoxDelegate(QObject *parent, int checkColumnIx) : QItemDelegate(parent) { checkBoxColumnIx = checkColumnIx; }
CheckBoxDelegate::~CheckBoxDelegate(){
}
QWidget *CheckBoxDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() == checkBoxColumnIx) { QCheckBox* chb = new QCheckBox(parent); return chb; } else { return QItemDelegate::createEditor(parent, option, index); } }
void CheckBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { if (index.column() == checkBoxColumnIx) { int checked = index.model()->data(index, Qt::DisplayRole).toInt(); QCheckBox* chb = qobject_cast<QCheckBox*>(editor); chb->setChecked(checked == 1); } else { QItemDelegate::setEditorData(editor, index); } }
void CheckBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { if (index.column() == checkBoxColumnIx) {
} else { QItemDelegate::setModelData(editor, model, index); } }
void CheckBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex & index ) const { editor->setGeometry(option.rect); }
void CheckBoxDelegate::paint(QPainter * painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() == checkBoxColumnIx) { QWidget *w = dynamic_cast<QWidget *>(painter->device()); if (w) { QItemDelegate::drawBackground( painter, option, index ); QItemDelegate::drawCheck( painter, option, option.rect, index.data(Qt::EditRole).toBool() ? Qt::Checked : Qt::Unchecked ); drawFocus(painter, option, option.rect); } } else { QItemDelegate::paint(painter, option, index); } }
Название: Re: QtableView разноцветные строки и Checkbox в одной из колонок
Отправлено: kambala от Февраль 07, 2015, 23:32
чекбокс может и дефолтный делегат отрисовать, просто возвращай в модели флаги, включающие Qt::ItemIsUserCheckable, для нужных индексов.
ну а цвет в виде QBrush просто из data() модели возвращай для роли Qt::BackgroundRole
|