QTreeView使用总结2,常用API介绍

1,简介

上一篇展示了一个最简单的QTreeView示例,只是刚刚能显示数据而已。

实际使用中,需要对QTreeView的各项属性进行配置,下面介绍一下常用设置项。

先看最终效果:

2,QTreeView常用设置项

void MainWindow::InitTree()
{
    //1,QTreeView常用设置项
    QTreeView* t = ui->treeView;
    t->setEditTriggers(QTreeView::NoEditTriggers);			//单元格不能编辑
    t->setSelectionBehavior(QTreeView::SelectRows);			//一次选中整行
    t->setSelectionMode(QTreeView::SingleSelection);        //单选,配合上面的整行就是一次选单行
    t->setAlternatingRowColors(true);                       //每间隔一行颜色不一样,当有qss时该属性无效
    t->setFocusPolicy(Qt::NoFocus);                         //去掉鼠标移到单元格上时的虚线框

    //2,列头相关设置
//    t->header()->hide();                                  //隐藏列头
    t->header()->setStretchLastSection(true);               //最后一列自适应宽度
    t->header()->setDefaultAlignment(Qt::AlignCenter);      //列头文字默认居中对齐

    //3,构造Model
    QStandardItemModel* model = new QStandardItemModel(ui->treeView);
    model->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("序号") << QStringLiteral("名称"));     //设置列头
    for(int i=0;i<5;i++)
    {
        //一级节点,加入mModel
        QList<QStandardItem*> items1;
        QStandardItem* item1 = new QStandardItem(QString::number(i));
        QStandardItem* item2 = new QStandardItem(QStringLiteral("一级节点"));
        items1.append(item1);
        items1.append(item2);
        model->appendRow(items1);

        for(int j=0;j<5;j++)
        {
            //二级节点,加入第1个一级节点
            QList<QStandardItem*> items2;
            QStandardItem* item3 = new QStandardItem(QString::number(j));
            QStandardItem* item4 = new QStandardItem(QStringLiteral("二级节点"));
            items2.append(item3);
            items2.append(item4);
            item1->appendRow(items2);

            for(int k=0;k<5;k++)
            {
                //三级节点,加入第1个二级节点
                QList<QStandardItem*> items3;
                QStandardItem* item5 = new QStandardItem(QString::number(k));
                QStandardItem* item6 = new QStandardItem(QStringLiteral("三级节点"));
                items3.append(item5);
                items3.append(item6);
                item3->appendRow(items3);
            }
        }
    }

    //4,应用model
    t->setModel(model);

    //一些项在应用model后设置
    //5,设第一列初始宽度;第一列固定宽度
    t->header()->resizeSection(0,100);
    t->header()->setSectionResizeMode(0,QHeaderView::Fixed);
    //6,默认选中一级节点的第一行
    QModelIndex rootIndex = t->rootIndex();
    QModelIndex selIndex = model->index(0,0,rootIndex);
    t->setCurrentIndex(selIndex);
}

3,说明

QTreeView常用接口:

1,setEditTriggers:设置单元格是否可编辑、如何操作来编辑。

参数含义为:

enum EditTrigger {
    NoEditTriggers = 0,     //不可编辑
    CurrentChanged = 1,     //任何时候都能对单元格修改
    DoubleClicked = 2,      //双击单元格
    SelectedClicked = 4,    //单击已选中的内容
    EditKeyPressed = 8,     //键盘的编辑键,如F2
    AnyKeyPressed = 16,     //按下任意键就能修改
    AllEditTriggers = 31    //以上条件全包括
};

2,setSelectionBehavior:设置以单个单元格、还是一行、一列方式选择

参数含义为:

enum SelectionBehavior {
    SelectItems,        //选中单个单元格
    SelectRows,         //选中一行
    SelectColumns       //选中一列
};

3,setSelectionMode:设置单选、多选

enum SelectionMode {
    NoSelection,        //不能选择
    SingleSelection,    //单选
    MultiSelection,     //多选,不用按ctrl键即可多选,选择新项时不取消之前选择,已选中的再选择会取消选择
    ExtendedSelection,  //多选,按ctrl、shift键多选,选择新项时取消之前选择
    ContiguousSelection   //多选,需要按ctrl或shift都是shift选中效果,即选中两次点击之间的所有元素
};

4,setAlternatingRowColors:设置每间隔一行,背景色不同,如图

5,setFocusPolicy(Qt::NoFocus) ;    // 常用来取消单元格的虚线框

6,t->header()->setStretchLastSection(true);     //最后一列自适应宽度

7,t->header()->setDefaultAlignment(Qt::AlignCenter);      //列头文字默认居中对齐

8,//设第一列初始宽度;第一列固定宽度
    t->header()->resizeSection(0,100);

    t->header()->setSectionResizeMode(0,QHeaderView::Fixed);

9,//,默认选中一级节点的第一行
    QModelIndex rootIndex = t->rootIndex();
    QModelIndex selIndex = model->index(0,0,rootIndex);

    t->setCurrentIndex(selIndex);

4,源码下载

本专栏大部分源码可在群文件下载:

群号码:1149411109

群名称:Qt实战派学习群

QTreeView是Qt框架中的一个控件,用于显示树形结构的数据。QScrollBar是Qt框架中的一个控件,用于显示滚动条。 在给QTreeView添加QScrollBar时,可以通过判断QTreeView的垂直滚动条是否可见来确定是否需要进行补偿。如果垂直滚动条可见,可以使用rect.setRight(rect.right() - tree->verticalScrollBar()->width())来补偿宽度,使得绘制的内容不会被滚动条遮挡。 在自定义派生类MyTreeDelegate的paint函数中,可以通过获取QTreeView的垂直滚动条宽度,判断是否可见,并根据需要进行补偿操作。然后使用painter->drawText来绘制文本内容,实现显示rect.right的功能。最后调用QStyledItemDelegate::paint来完成绘制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [QTreeView 一个竖直滚动条引起的问题](https://blog.csdn.net/luoshabugui/article/details/103393021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [C++ QT5开发教程](https://download.csdn.net/download/prickly/9673714)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆枫゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值