Thinkvd 开发日志
参考:http://blog.csdn.net/vah101/archive/2011/02/17/6190809.aspx
里面已经说明如何实现,在此就不再重复,反自己遇到的问题说一下:
问题1:checkbox后面显示状态数字
问题2:QTreeView中第一行的checkbox状态改变,要Mouse离开才看到响应.
问题1看了一个Qt源代码,在void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option,
const QModelIndex &index) const未有:
value = index.data(Qt::DisplayRole);
if (value.isValid() && !value.isNull()) {
v4->features |= QStyleOptionViewItemV2::HasDisplay;
v4->text = displayText(value, v4->locale);
}
也就用在Model中的data函数,让Checkbox的数据为空即可
if(role == Qt::DisplayRole )
{
............................
rtv = item->data(index.column());
if (key == "_chkbox"){
rtv = QVariant();
}
.........................
}
问题2有点奇怪,可能是自己写的Model或View某个地方有问题,用qt的examples/itemviews/editabletreemodel 测试正常.
解决时刷新了两次才正常:
bool ImListTreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
bool result = false;
if (role == Qt::EditRole || role == Qt::CheckStateRole )
{
ImListTreeItem *item = getItem(index);
if (role==Qt::CheckStateRole && index.column()==0)
{
item->setData("_chkbox", value);
emit(dataChanged(index, index));
}
{
result = item->setData(index.column(), value);
if (result) emit dataChanged(index, index);
}
}
return result;
}