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;
}
参考: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;
}
相关文章推荐
- Qt:在TreeModel+QTreeView中使用复选框(checkbox)
- Qt:在TreeModel+QTreeView中使用复选框(checkbox)
- Qt:在TreeModel+QTreeView中使用复选框(checkbox)
- Qt:在TreeModel+QTreeView中使用复选框(checkbox)
- Qt中使用QDirModel / QFileSystemModel + QTreeView显示Checkbox复选框
- Qt:TreeModel+QTreeView中使用图标
- Qt:TreeModel+QTreeView中使用图标
- EXTJS4.0 tree.Panel 使用了model 取值 问题
- Qt树形控件QTreeView使用2——复选框的设置
- Qt树形控件QTreeView使用1——节点的添加删除操作 复选框的设置
- Qt树形控件QTreeView使用1——节点的添加删除操作 复选框的设置
- Qt树形控件QTreeView使用2——复选框的设置
- QT数据库使用案列【联系人】-- 使用sqlite和QStringListModel
- Qt中QAbstractTableModel、QItemDelegate的联合使用
- C/C++ -- Gui编程 -- Qt库的使用 -- Qt编码问题
- Qt编程25:QDirModel与QTreeView使用显示目录结构
- 使用QT+MSVC编写32/64位动态库dll的问题记录
- QT中使用THUNK技术实现回调问题
- qt使用ttf在2440上字体太小的问题
- Qt 之 使用 Model-View(模型视图框架)动态的加载显示数据