checkbox column in tableview
-
Hello, what i need is a column of checkboxes in my qtableview.I have reimplemeted QItemDelegate class, got the column but when u click on the checkbox a new Widget appears on screen, but not on top of that cell.
here is my code :CheckBoxDelegate::CheckBoxDelegate(QObject *parent) :
QItemDelegate(parent)
{
}void CheckBoxDelegate::changed( bool value )
{
BooleanWidget checkbox = static_cast<BooleanWidget>( sender() );
emit commitData( checkbox );
emit closeEditor( checkbox );
}QWidget *CheckBoxDelegate::createEditor( QWidget parent,const QStyleOptionViewItem &/ option /,const QModelIndex &/ index */ ) const
{
BooleanWidget *editor = new BooleanWidget( parent );
connect( editor, SIGNAL( toggled ( bool ) ), this, SLOT( changed( bool ) ) );return editor;
}
void CheckBoxDelegate::setEditorData( QWidget *editor,const QModelIndex &index ) const
{
int value = index.model()->data(index, Qt::DisplayRole).toInt();BooleanWidget *checkbox = static_cast<BooleanWidget*>(editor); if(value == 1) { checkbox->setChecked(true); } else { checkbox->setChecked(false); }
}
void CheckBoxDelegate::setModelData( QWidget *editor,QAbstractItemModel *model,const QModelIndex &index ) const
{
BooleanWidget checkBox = qobject_cast<BooleanWidget>( editor );
Qt::CheckState value;if(checkBox->isChecked()) value = Qt::Checked; else value = Qt::Unchecked; model->setData( index, value, Qt::DisplayRole);
}
void CheckBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
drawCheck(painter, option, option.rect, index.data().toBool() ? Qt::Checked : Qt::Unchecked);
drawFocus(painter, option, option.rect);
}class BooleanWidget : public QWidget
{
Q_OBJECT
QCheckBox * checkBox;public: BooleanWidget(QWidget * parent = 0) { checkBox = new QCheckBox(this); QHBoxLayout * layout = new QHBoxLayout(this); layout->addWidget(checkBox,0, Qt::AlignCenter); } bool isChecked(){return checkBox->isChecked();} void setChecked(bool value){checkBox->setChecked(value);}
};
here is how it looks : http://www.cyberforum.ru/attachments/600091d1447250662any help is higly appreciated. Thanks in advance!