首页 > 技术文章 > 2 QT数据传输(MVC)

bianchengyuan 2019-07-05 10:26 原文

树相关

树形控件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);                               

	

在这里插入图片描述

推荐阅读