概要:本期主要介绍Qt中QTableView类的结构和操作实现。
一、简介
头文件:#include<QTreeView>
模块:QT += widgets
父类:QAbstractItemView
功能:Qt中的QTreeView可以将数据项显示在树视图中
二、操作接口
- setEditTriggers:设置单元格是否可编辑、如何操作来编辑。
ui->treeView->setEditTriggers(QTreeView::NoEditTriggers); //单元格不能编辑
- setSelectionBehavior:设置以单个单元格、还是一行、一列方式选择
ui->treeView->setSelectionBehavior(QTreeView::SelectRows); //一次选中整行
- setSelectionMode:设置单选、多选
ui->treeView->setSelectionMode(QTreeView::SingleSelection); //单选,配合上面的整行就是一次选单行
- setAlternatingRowColors:设置每间隔一行,背景色不同
ui->treeView->setAlternatingRowColors(true); //每间隔一行颜色不一样,当有qss时该属性无效
- setFocusPolicy(Qt::NoFocus): 常用来取消单元格的虚线框
ui->treeView->setFocusPolicy(Qt::NoFocus); //去掉鼠标移到单元格上时的虚线框
- setModel 绑定视图和模型
ui->treeView->setModel(mTreeItemModel); //绑定视图模型
对于界面显示数据的增加、删除,不能通过视图来操作(视图只用于显示模型中的数据),所以对于显示数据的操作应该对于该视图绑定的模型进行操作。
三、源码分享
#ifndef TREEVIEW_H
#define TREEVIEW_H
#include <QDialog>
#include <QTreeView>
#include <QStandardItemModel>
#include <QStandardItem>
QT_BEGIN_NAMESPACE
namespace Ui { class TreeView; }
QT_END_NAMESPACE
class TreeView : public QDialog
{
Q_OBJECT
public:
TreeView(QWidget *parent = nullptr);
~TreeView();
/* 初始化树视图 */
void InitTreeView();
private:
Ui::TreeView *ui;
/* 标准模型 */
QStandardItemModel *mTreeItemModel;
};
#endif // TREEVIEW_H
#include "treeview.h"
#include "ui_treeview.h"
TreeView::TreeView(QWidget *parent)
: QDialog(parent)
, ui(new Ui::TreeView)
{
ui->setupUi(this);
mTreeItemModel = new QStandardItemModel(this);
InitTreeView(); //初始化
}
TreeView::~TreeView()
{
delete ui;
}
void TreeView::InitTreeView()
{
//1. 设置视图属性
ui->treeView->setEditTriggers(QTreeView::NoEditTriggers); //单元格不能编辑
ui->treeView->setSelectionBehavior(QTreeView::SelectRows); //一次选中整行
ui->treeView->setSelectionMode(QTreeView::SingleSelection); //单选,配合上面的整行就是一次选单行
ui->treeView->setAlternatingRowColors(true); //每间隔一行颜色不一样,当有qss时该属性无效
ui->treeView->setFocusPolicy(Qt::NoFocus); //去掉鼠标移到单元格上时的虚线框
//2. 列头相关设置
// ui->treeView->header()->hide(); //隐藏列头
ui->treeView->header()->setStretchLastSection(true); //最后一列自适应宽度
ui->treeView->header()->setDefaultAlignment(Qt::AlignCenter); //列头文字默认居中对齐
//3. 初始化模型
mTreeItemModel->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("1级节点"));
items1.append(item1);
items1.append(item2);
mTreeItemModel->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("2级节点"));
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("3级节点"));
items3.append(item5);
items3.append(item6);
item3->appendRow(items3);
}
}
}
ui->treeView->setModel(mTreeItemModel); //绑定视图模型
}
结尾
本期就简单介绍了树视图的使用,以及一些常用属性的设置。下期再会吧:)