您的位置:首页 > 编程语言 > Qt开发

Qt:在TreeModel+QTreeView中使用复选框问题

2011-06-10 12:17 821 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: