firemail

标题: QTreeView使用总结 [打印本页]

作者: Qter    时间: 2020-3-8 17:12
标题: QTreeView使用总结
本帖最后由 Qter 于 2020-3-9 17:51 编辑

http://www.qtcn.org/bbs/simple/?t66006.html
原创系列文章《QTreeView使用总结》创业一年了,主要用C++/Qt.
最近不忙,在整理一个QTreeView系列文章,总结用到的知识点。
写了一半了,这是序:
QTreeView使用总结--序
https://blog.csdn.net/dpsying/article/details/79687254

欢迎拍砖和提意见!
有什么想补充的点也欢迎提下,根据我能力补充。


序文如下:

https://blog.csdn.net/dpsying/article/details/79687254

1,简介




在Qt开发过程中,我发现树控件即QTreeView使用的非常频繁。
各种批量展示和编辑信息的地方,都用得上该控件。
我的项目在使用QTreeView过程中,用到了各种常规、不常规的功能,并进行过各种改造。

这里将这些知识与技巧作一个总结,分享给大家。




2,《QTreeView使用总结》目录




该系列文章暂拟了下列内容:
1,QTreeView一个简单使用示例
2,常用API介绍
3,表头、行列相关的设置方法
4,Model/View框架介绍
5,选中信号处理
6,单击双击的信号与事件
7,右键菜单
8,风格美化,使用qss样式表
9,使用委托示例:定制item输入效果
10,使用委托示例:定制item显示效果
11,数据过滤,使用代理model,简单过滤
12,数据过滤,使用代理model,自定义过滤条件
13,自定义model示例,大大优化性能和内存
14,自定义model示例,控制对齐和颜色
15,定时刷新后,当前选中行的处理



作者: Qter    时间: 2020-4-1 09:38
https://blog.csdn.net/ajaxhe/article/details/7518285
https://blog.csdn.net/xdw_it/article/details/80973144
作者: Qter    时间: 2020-4-1 14:17
本帖最后由 Qter 于 2020-4-1 14:24 编辑

https://www.qtcentre.org/threads/63069-Changing-QStyleOptionButton-(QCheckbox)-to-use-StyleSheet-not-working

画树内部子定义风格的复选框
下面的方法不行
  1. //QStyleOptionButton check_box_style_option;
  2.                         //check_box_style_option.state |= QStyle::State_Enabled;
  3.                         //if (checked)
  4.                         //{
  5.                         //        check_box_style_option.state |= QStyle::State_On;
  6.                         //}
  7.                         //else
  8.                         //{
  9.                         //        check_box_style_option.state |= QStyle::State_Off;
  10.                         //}
  11.                         //check_box_style_option.rect = ceckBoxRect;
  12.                         //QApplication::style()->drawControl(QStyle::CE_CheckBox, &check_box_style_option, painter);
  13.                         /*QCheckBox* styledCheckBox = new QCheckBox();
  14.                         styledCheckBox->setGeometry(ceckBoxRect);
  15.                         styledCheckBox->setCheckState(checkState);
  16.                         styledCheckBox->setStyleSheet(
  17.                                 "QCheckedBox::indicator:unchecked { image: url(:/gui/images/checkbox_unchecked.png);}"
  18.                                 "QCheckedBox::indicator:checked { image: url(:/gui/images/checkbox_checked.png);}"
  19.                         );
复制代码
要用这种
  1. QPixmap indicatorPixmap;
  2.                         QStyleOptionButton check_box_style_option;
  3.                         if (checked)
  4.                         {
  5.                                 check_box_style_option.state |= QStyle::State_On;
  6.                                 indicatorPixmap = QPixmap(":/gui/images/checkbox_checked.png");
  7.                         }
  8.                         else
  9.                         {
  10.                                 check_box_style_option.state |= QStyle::State_Off;
  11.                                 indicatorPixmap = QPixmap(":/gui/images/checkbox_unchecked.png");
  12.                         }
  13.                         QApplication::style()->drawItemPixmap(painter, ceckBoxRect, 0, indicatorPixmap);
复制代码

作者: Qter    时间: 2020-4-7 14:07
用递归实现了
下面是 collapse 所有子节点的代码
expand 所有子节点的代码类似,或者在递归函数上加一个 bool 参数就能实现。

/*collapse all child nodes*/
int childCount = model->rowCount(index);
recursive_collapse(index,childCount);

void WellImportDialog::recursive_collapse(const QModelIndex index,int childCount)
{

    for(int childNo=0;childNo<childCount;childNo++)
    {
        QModelIndex childIndex = index.child(childNo,0);
        if(ui->treeView_dir->isExpanded(childIndex))
        {
            ui->treeView_dir->setExpanded(childIndex,false);
            if(int rowCount = model->rowCount(childIndex)>0)
                recursive_collapse(childIndex,rowCount);
        }
    }

}





欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3