树相关
树形控件QTressView用法示例
控件间的联系 |
---|
QStandardItem |
QList<QStandardItem *> MeasureItems |
QStandardItemModel |
QTreeView |
//包含头文件
#include <QStandardItem>
#include <QStandardItemModel>
#include <QTreeView>
#include <QTableView>
//定义treeview
QTreeView * m_treeView=new QTreeView ;
//定义model
QStandardItemModel* m_treeModel=new QStandardItemModel;
// standItemModel->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("序号") << QStringLiteral("名称")); //设置列表头
//定义所有子节点
//第一级
QStandardItem *m_MeasurementItem =new QStandardItem ;
//第二级
QStandardItem *m_MetaDataItem =new QStandardItem ;
QStandardItem *m_ConditionsItem=new QStandardItem ;
//第三级
QStandardItem *m_AItem =new QStandardItem ;
QStandardItem *m_BItem=new QStandardItem ;
QStandardItem *m_CItem=new QStandardItem ;
QStandardItem *m_BasicConItem=new QStandardItem ;
QStandardItem *m_VarConditionItem=new QStandardItem ;
QStandardItem *m_ModelItem=new QStandardItem ;
//组织树节点之间的关系
//第一级
QList<QStandardItem *> allItems;
m_MeasurementItem =new QStandardItem("Measurement");
allItems.append(m_MeasurementItem);
m_treeModel->appendRow(allItems);
//第二级
QList<QStandardItem *> MeasureItems;
m_MetaDataItem =new QStandardItem("MetaData");
m_ConditionsItem =new QStandardItem("Conditions");
MeasureItems.append(m_MetaDataItem);
MeasureItems.append(m_ConditionsItem);
m_MeasurementItem->appendRows(MeasureItems);
//添加一行用appendRow,添加对行用appendRows
//或者一行内添加多个也用appendRow单数
/*
QList<QStandardItem*> items2;
QStandardItem* item3 = new QStandardItem(QString::number(j));
QStandardItem* item4 = new QStandardItem(QStringLiteral("二级节点"));
items2.append(item3);
items2.append(item4);
item1->appendRow(items2);//这里用单数代表一行里边添加多个内容
*/
//第三级
QList<QStandardItem *> MetaDataItems;
m_AItem =new QStandardItem("channel.A");
m_BItem =new QStandardItem("channel.B");
m_CItem =new QStandardItem("channel.C");
MetaDataItems.append(m_AItem);
MetaDataItems.append(m_BItem);
MetaDataItems.append(m_CItem);
m_MetaDataItem->appendRows(MetaDataItems);
QList<QStandardItem *> conditionsItems;
m_BasicConItem =new QStandardItem("BasicCon");
m_VarConditionItem =new QStandardItem("VarCondition");
m_ModelItem =new QStandardItem("Model");
conditionsItems.append(m_BasicConItem);
conditionsItems.append(m_VarConditionItem);
conditionsItems.append(m_ModelItem);
m_ConditionsItem->appendRows(conditionsItems);
//将model分配给view
m_treeView->setModel(m_treeModel);
m_treeView->expandAll();//展开所有子树
m_treeView->setEditTriggers(0);//设置子树不可编辑
m_treeView->setHeaderHidden(true);//隐藏表头
//最后再将view分配给布局器就可以了
效果图:
表相关
QTableView 用法示例
控件间的联系 |
---|
QStandardItem |
QStandardItemModel |
QTableView |
//添加头文件
#include <QStandardItem>
#include <QStandardItemModel>
#include <QTreeView>
#include <QTableView>
#include <QHeaderView>
//②内容书写
m_fileTableView = new QTableView;
m_fileStandItemModel = new QStandardItemModel();
//添加表头
m_fileStandItemModel->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("文件序号")<<QStringLiteral("名称")<<QStringLiteral("大小(M)")); //设置列头
m_fileTableView->setModel(m_fileStandItemModel); //挂载表格模型
//设置表格属性
m_fileTableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter); //表头信息显示居中
m_fileTableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::Fixed); //设定表头列宽不可变
m_fileTableView->horizontalHeader()->setSectionResizeMode(1,QHeaderView::Fixed);
m_fileTableView->horizontalHeader()->setSectionResizeMode(2,QHeaderView::Stretch);//设定第2列表头弹性拉伸
m_fileTableView->setColumnWidth(0,100); //设定表格第0列宽度
m_fileTableView->setColumnWidth(1,1200); m_fileTableView->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选中时整行选中
m_fileTableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置表格属性只读,不能编辑
运行效果图:
选中多个文件并将其属性导入表格中
//读取文件
QStringList str_path_list = QFileDialog::getOpenFileNames(this, QStringLiteral("选择转码文件"),tr("D:/"), QStringLiteral("视频文件(*.txt *.m3u8);;Allfile(*.*);;"));
if(str_path_list.size() == 0){
return;
}
//重新建表
m_fileStandItemModel->clear();
m_fileStandItemModel->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("文件序号")<<QStringLiteral("名称")<<QStringLiteral("大小(M)")); //设置列头
for(int i=0;i<str_path_list.size();i++){
//定义文件信息类
QString nFileName = str_path_list.at(i);
QFileInfo fileInfo = QFileInfo(nFileName);
QString nBaseName = fileInfo.fileName();
long long nFileSize = fileInfo.size();
QStandardItem* nStandItemOrder = new QStandardItem(QStringLiteral("%1").arg(i+1));//%1占位符的作用,效果等同于后边的变量的替换
QStandardItem* nStandItemName = new QStandardItem(QStringLiteral("%1").arg(nBaseName));
QStandardItem* nStandItemSize = new QStandardItem(QStringLiteral("%1").arg(nFileSize));
m_fileStandItemModel->setItem(i,0,nStandItemOrder);
m_fileStandItemModel->item(i,0)->setForeground(QBrush(QColor(255,0,0))); //设置字符颜色
m_fileStandItemModel->item(i,0)->setTextAlignment(Qt::AlignCenter); //设置表格内容居中
m_fileStandItemModel->setItem(i,1,nStandItemName);
m_fileStandItemModel->setItem(i,2,nStandItemSize);