参考链接:
在参考链接的基础上,对程序的功能进行了拓展,添加了一个"click me"按钮用于获取已选节点的内容,截图效果如下:
项目源码:
1. Qt:在TreeModel+QTreeView中使用复选框(checkbox)
2. QTreeView Checkboxes
参考链接1实现了基本功能,但在后期进行拓展的时候并不方便,比如说要默认情况下所有节点以选中,参考链接1提供的程序并不好修改。
参考链接2通过对TreeItem结构添加一个boolchecked来变量保存节点的状态(参考链接1中通过TreeModel中的成员变量QList<QPersistentModelIndex> m_checkedList来保存"已选择"节点),不失为一个好办法,也方便后期的拓展。
在参考链接的基础上,对程序的功能进行了拓展,添加了一个"click me"按钮用于获取已选节点的内容,截图效果如下:
![]() |
![]() |
可以看到,运行结果与预期一致。
项目源码:
部分源码:
这里就以QT附带的simpletreemodel项目为例,说明一下其用法。simpletreemodel项目的路径通常在qt目录的example目录的itemviews目录下,例如,我的就在C:\Qt\4.8.0\examples\itemviews\simpletreemodel里。
treemodel.cpp
bool TreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (role==Qt::CheckStateRole && index.column()==0)
{
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
if (value==Qt::Unchecked)
{
//m_checkedList.removeOne(index);
item->setCheckState(false);
emit(dataChanged(index, index));
}
else if(value==Qt::Checked)
{
//m_checkedList.append(index);
item->setCheckState(true);
emit(dataChanged(index, index));
}
int childCount
|