Qt下操作TabWidget和TreeWidget以及treeView的操作,实现控件的上移,下移,删除,新建操作;以及树形控件的操作;

Qt下操作TabWidget和TreeWidget以及treeView的操作,实现控件的上移,下移,删除,新建操作;以及树形控件的操作;
Qt下分为模型控件和Item控件:以下代码都有设计:
代码量大,但是只要新建一个工程,完全读懂,以上控件的操作基本都可以学会!
infodialog.h

#ifndef INFODIALOG_H
#define INFODIALOG_H

#include <QDialog>
#include "ui_infodialog.h"
#include <QString>
#include <QMessageBox>

class InfoDialog : public QDialog
{
	Q_OBJECT
signals:
	void InfoSig(QString, QString, QString);

public:
	InfoDialog(QWidget *parent = 0);
	~InfoDialog();
	QString m_str1;
	QString m_str2;
	QString m_str3;

public slots:
	void InfoOkSlots();
	void InfoCleSlots();

private:
	Ui::InfoDialog ui;
	
	
};

#endif // INFODIALOG_H

infodialog.cpp

#include "infodialog.h"

InfoDialog::InfoDialog(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);
	connect(ui.pushButton_OK, SIGNAL(clicked()), this, SLOT(InfoOkSlots()));
	
	connect(ui.pushButton_CANCLE, SIGNAL(clicked()), this, SLOT(InfoCleSlots()));

}

InfoDialog::~InfoDialog()
{

}

void InfoDialog::InfoOkSlots()
{
	m_str1 = ui.lineEdit->text();
	m_str2 = ui.lineEdit_2->text();
	m_str3 = ui.lineEdit_3->text();

	if (m_str1.isEmpty()|| m_str2.isEmpty() || m_str3.isEmpty())
	{
		QMessageBox::warning(this, "error", "NULL");
		return;
	}
	emit InfoSig(m_str1, m_str2, m_str3);
}

void InfoDialog::InfoCleSlots()
{
	m_str1.clear();
	m_str2.clear();
	m_str3.clear();

	close();
}

qttreeview.h

#ifndef QTTREEVIEW_H
#define QTTREEVIEW_H

#include <QtWidgets/QWidget>
#include "ui_qttreeview.h"
#include <QTreeView>
#include <QDir>
#include <QIcon>
#include <QList>
#include <QMap>
#include <QDebug>
#include <QFileInfo>
#include <QString>
#include <QDateTime>
#include <QStringList>
#include <QStandardItem>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QMessageBox>
#include <QStringListModel>
#include <QFileInfoList>
#include <QStandardItemModel>
#include <ActiveQt/QAxObject> 
#include <ActiveQt/QAxBase>
#include <QFileDialog>
#include <QByteArray>
#include <QDesktopServices>
#include "infodialog.h"
#include "treewgdialog.h"

class QtTreeView : public QWidget
{
	Q_OBJECT

public:
	QtTreeView(QWidget *parent = 0);
	~QtTreeView();

	void MakeConnect();
	void InintTreeView();
	void InitValue();
	void InitTreeWidget();
	QFileInfoList allfile(QTreeWidgetItem* root, QString path);
	void ReadExecl();
	void InitTabWidget();

public slots:
	void GetItemInfoSlots(const QModelIndex &);
	void DeleteItemSlots();
	void UpItemRowSlots();
	void DownItemRowSlots();
	void NewItemSlots();
	void GetInfoSlots(QString, QString, QString);
	void ShowExpInfoToTabSlots(QTreeWidgetItem *);
	void GetTabWidgetInfoSlots(QTableWidgetItem *);

	void DeleteTabItemSlots();
	void UpTabItemRowSlots();
	void DownTabItemRowSlots();
	void NewTabItemSlots();

	void ShowTabWidgetFileSlots(QTableWidgetItem *);
	void DeleteTreeWiSlots();
	void GetTreeWigetInfo(QTreeWidgetItem *, int);
	void NewTreeWidgetSlots();
	void GetNewTreeWgInfoSlots(QStringList);
	void EditTreeWgSlots();

private:
	Ui::QtTreeViewClass ui;
	QStandardItemModel *pmodel;
	int m_rowNum;
	int m_allSize;

	QString m_str1;
	QString m_str2;
	QString m_str3;

	QStringList m_itemInfo;
	InfoDialog *pm_InfoDialog;
	QStringList m_listInfo;
	QStringList m_listTabInfo;

	int m_tabNum;
	int m_tabRowNum;
	int m_tabCoulNum;

	int m_count;

	QMap<QString, QString> m_map;

	TreeWGDialog *pm_treeWg;
};

#endif // QTTREEVIEW_H

qttreeview.cpp

#include "qttreeview.h"
#include <windows.h>
#include <Ole2.h>
#include <qt_windows.h>
QtTreeView::QtTreeView(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	InitValue();
	InitTabWidget();
	InintTreeView();
	InitTreeWidget();
	ReadExecl();
	MakeConnect();

}

QtTreeView::~QtTreeView()
{
	m_itemInfo.clear();

	if (pm_InfoDialog != NULL)
	{
		delete pm_InfoDialog;
	}
}

void QtTreeView::MakeConnect()
{
	connect(ui.treeView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(GetItemInfoSlots(const QModelIndex &)));

	connect(ui.pushButton_DELETE, SIGNAL(clicked()), this, SLOT(DeleteItemSlots()));

	connect(ui.pushButton_UP, SIGNAL(clicked()), this, SLOT(UpItemRowSlots()));

	connect(ui.pushButton_DOWN, SIGNAL(clicked()), this, SLOT(DownItemRowSlots()));

	connect(ui.pushButton_NEW, SIGNAL(clicked()), this, SLOT(NewItemSlots()));

	connect(pm_InfoDialog, SIGNAL(InfoSig(QString, QString, QString)), this, SLOT(GetInfoSlots(QString, QString, QString)));

	connect(ui.treeWidget, SIGNAL(itemExpanded(QTreeWidgetItem *)), this, SLOT(ShowExpInfoToTabSlots(QTreeWidgetItem *)));

	connect(ui.treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(GetTreeWigetInfo(QTreeWidgetItem *, int)));

	connect(ui.tableWidget, SIGNAL(itemClicked(QTableWidgetItem *)), this, SLOT(GetTabWidgetInfoSlots(QTableWidgetItem *)));

	connect(ui.tableWidget, SIGNAL(itemDoubleClicked(QTableWidgetItem *)), this, SLOT(ShowTabWidgetFileSlots(QTableWidgetItem *)));

	connect(ui.pushButton_TabWDELETE, SIGNAL(clicked()), this, SLOT(DeleteTabItemSlots()));

	connect(ui.pushButton_TabWUP, SIGNAL(clicked()), this, SLOT(UpTabItemRowSlots()));

	connect(ui.pushButton_TabWDOWN, SIGNAL(clicked()), this, SLOT(DownTabItemRowSlots()));

	connect(ui.pushButton_TabWNEW, SIGNAL(clicked()), this, SLOT(NewTabItemSlots()));

	connect(ui.pushButton_TreeWDEL, SIGNAL(clicked()), this, SLOT(DeleteTreeWiSlots()));

	connect(ui.pushButton_TreeWNEW, SIGNAL(clicked()), this, SLOT(NewTreeWidgetSlots()));

	connect(pm_treeWg, SIGNAL(TreeWgInfoSig(QStringList)), this, SLOT(GetNewTreeWgInfoSlots(QStringList)));

	connect(ui.pushButton_TreeWEDIT, SIGNAL(clicked()), this, SLOT(EditTreeWgSlots()));
}

void QtTreeView::InitValue()
{
	m_allSize = 0;
	m_rowNum = -1;
	pm_InfoDialog = new InfoDialog(this);
	pm_treeWg = new TreeWGDialog(this);

	m_tabRowNum = -1;
	m_tabCoulNum = -1;
	m_tabNum = -1;
	m_count = -1;
}

void QtTreeView::InitTreeWidget()
{
	QString path = "F:/TTTT";
	QStringList head;
	head << path << QString::fromLocal8Bit("测试");
	ui.treeWidget->setHeaderLabels(head);
	//ui.treeWidget->setHeaderHidden(true);
	QTreeWidgetItem *root = new QTreeWidgetItem(ui.treeWidget);
	root->setText(0, path);
	root->setIcon(0, QIcon("icon.PNG"));
	root->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
	//root->setCheckState(0, Qt::Unchecked);

	allfile(root, path);
}

QFileInfoList QtTreeView::allfile(QTreeWidgetItem* root, QString path)
{
	QDir dir(path);
	
	QFileInfoList fileList = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
	QFileInfoList floderList = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);

	for (int i = 0; i < floderList.size(); ++i)
	{
		QString filePath = floderList.at(i).absoluteFilePath() + "/";
		qDebug() << "failpath +_+_+_+_+_+_+_+_+_+_+_:  " << filePath;

		QFileInfo folderInfo = floderList.at(i);
		QString name = folderInfo.fileName();
		qDebug() <<"11111111111111111111111111+++++++++" <<name;
		QTreeWidgetItem *childRoot = new QTreeWidgetItem(QStringList() << name);
		childRoot->setIcon(0, QIcon("icon.PNG"));
		//childRoot->setCheckState(0, Qt::Unchecked);
		root->addChild(childRoot);

		QFileInfoList childFileList = allfile(childRoot, filePath);
		fileList.append(folderInfo);
		fileList.append(name);
		
	}

	QDir dirFile(path);
	dirFile.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
	dirFile.setSorting(QDir::Size | QDir::Reversed);
	QFileInfoList ListFile = dirFile.entryInfoList();

	for (int i = 0; i < ListFile.size(); ++i)
	{
		QFileInfo fileInfo = ListFile.at(i);
		QString fileName = fileInfo.fileName();

		m_map.insert(fileName, path);


		qDebug() <<"00000000000000000-------------0000" <<fileName;
		QTreeWidgetItem *child = new QTreeWidgetItem(QStringList() << fileName);
		//child->setIcon(0, QIcon("icon.PNG"));
		//child->setCheckState(0, Qt::Unchecked);
		root->addChild(child);
	}

	return fileList;
}

void QtTreeView::ReadExecl()
{
	
	QString path = "Test.xlsx";
	//HRESULT r = OleInitialize(0);
	CoInitialize(0);
	//if (r != S_OK && r != S_FALSE)
	//{
	//	qWarning("Qt:初始化失败%x", (unsigned int)r);
	//}

	QAxObject *excel = new QAxObject("Excel.Application");

	//OleUninitialize();
}

void QtTreeView::InitTabWidget()
{
	//ui.tableWidget->clear();
	
}

void QtTreeView::InintTreeView()
{
	
	pmodel = new QStandardItemModel(ui.treeView);
	pmodel->setHorizontalHeaderLabels(QStringList() << QStringLiteral("name") << QStringLiteral("Info")<< QStringLiteral(""));
	for (int i = 0; i < 5; ++i)
	{
		QList<QStandardItem *> itList;
		QStandardItem *item1 = new QStandardItem(QString::fromLocal8Bit("测试%1").arg(QString::number(i)));
		QStandardItem *childit1 = new QStandardItem(QString::fromLocal8Bit("信息%1").arg(QString::number(i)));
		QStandardItem *it1 = new QStandardItem(QString::fromLocal8Bit("其他%1").arg(QString::number(i)));
		//QStandardItem *it1 = new QStandardItem("");
		item1->setCheckable(true);
		//it1->setCheckable(true);
		//childit1->setCheckable(true);

		itList.append(item1);
		itList.append(childit1);
		itList.append(it1);
		pmodel->appendRow(itList);
		m_allSize++;
		//加入子项
		/*for (int k = 0; k < 5; ++k)
		{
			QList<QStandardItem *> itList1;
			QStandardItem *item2 = new QStandardItem(QString::fromLocal8Bit("子项%1").arg(QString::number(k)));
			

			item2->setCheckable(true);
			itList1.append(item2);
			item1->appendRow(itList1);
		}*/
	}
	
	ui.treeView->setModel(pmodel);
}


void QtTreeView::GetItemInfoSlots(const QModelIndex & index)
{
	/*qDebug() << index.data().toString();
	qDebug() << index.row();
	qDebug() << index.column();
	qDebug() << index.parent().data().toString();*/

	

	m_rowNum = index.row();
	m_itemInfo.clear();
	//获取当前行的所有信息
	QModelIndexList sel = ui.treeView->selectionModel()->selectedIndexes();
	int si = sel.size();
	qDebug() << si;

	for (int i = 0; i < si; ++i)
	{
		qDebug() << sel.at(i).data().toString();
		m_itemInfo.append(sel.at(i).data().toString());
	}

}

void QtTreeView::DeleteItemSlots()
{
	if (m_rowNum < 0)
	{
		QMessageBox::warning(this, "error", "delete error");
		return;
	}
	pmodel->removeRow(m_rowNum);
	m_allSize--;
}

void QtTreeView::UpItemRowSlots()
{
	QModelIndex index = ui.treeView->currentIndex();
	qDebug() <<"UpItemRowSlots:" <<index.row();
	if (m_rowNum <= 0)
	{
		QMessageBox::warning(this, "error", QString::fromLocal8Bit("选择上移的对象"));
		return;
	}

	int size = m_itemInfo.length();
	pmodel->removeRow(m_rowNum);
	QList<QStandardItem *> itList;
	for (int i = 0; i < size; ++i)
	{
		QStandardItem *item1 = new QStandardItem(m_itemInfo[i]);
		if (i == 0)
		{
			item1->setCheckable(true);
		}
		
		itList.append(item1);
	}

	pmodel->insertRow(m_rowNum - 1, itList);
	m_rowNum = m_rowNum - 1;
}

void QtTreeView::DownItemRowSlots()
{
	if (m_rowNum < 0)
	{
		QMessageBox::warning(this, "error", QString::fromLocal8Bit("选择下移的对象"));
		return;
	}

	int size = m_itemInfo.length();
	
	QList<QStandardItem *> itList;
	for (int i = 0; i < size; ++i)
	{
		QStandardItem *item1 = new QStandardItem(m_itemInfo[i]);
		if (i == 0)
		{
			item1->setCheckable(true);
		}

		itList.append(item1);
	}

	if (m_rowNum + 1 >= m_allSize)
	{
		return;
	}
	pmodel->removeRow(m_rowNum);
	pmodel->insertRow(m_rowNum + 1, itList);

	
	m_rowNum = m_rowNum + 1;
}

void QtTreeView::NewItemSlots()
{
	pm_InfoDialog->setModal(true);
	pm_InfoDialog->show();	
}

void QtTreeView::GetInfoSlots(QString s1, QString s2, QString s3)
{
	QString str1 = s1;
	QString str2 = s2;
	QString str3 = s3;

	if (str1.isEmpty() || str2.isEmpty() || str3.isEmpty())
	{
		return;
	}
	QList<QStandardItem *> itList;
	QStandardItem *item1 = new QStandardItem(QString::fromLocal8Bit("%1").arg(str1));
	QStandardItem *childit1 = new QStandardItem(QString::fromLocal8Bit("%1").arg(str2));
	QStandardItem *it1 = new QStandardItem(QString::fromLocal8Bit("%1").arg(str3));
	item1->setCheckable(true);
	//it1->setCheckable(true);
	//childit1->setCheckable(true);

	itList.append(item1);
	itList.append(childit1);
	itList.append(it1);
	pmodel->appendRow(itList);
	m_allSize++;
	pm_InfoDialog->close();
}

void QtTreeView::ShowExpInfoToTabSlots(QTreeWidgetItem * item)
{
	//获取当前节点父节点的信息
	QTreeWidgetItem *p = item->parent();
	QString parInfo;
	QString strRoot;
	//当前节点为根节点
	if (!p)
	{
		strRoot = item->text(0);
	}

	//遍历节点
	int icount = 0;
	QStringList tmpList;
	while (p)
	{
		icount++;
		QString str = p->text(0);
		str += "/";
		tmpList.append(str);
		p = p->parent();
	}

	int num = tmpList.size()-1;
	if (tmpList.size() > 1)
	{
		for (int i = num;i >= 0;  i--)
		{
			parInfo += tmpList[i];
		}
	}
	else if (tmpList.size() == 1)
	{
		parInfo = tmpList[0];
	}


	if (parInfo.isEmpty() && strRoot.isEmpty())
	{
		return;
	}

	QStringList head;
	head << QString::fromLocal8Bit("参数值") << QString::fromLocal8Bit("参数名称") << QString::fromLocal8Bit("类型") << QString::fromLocal8Bit("");

	//获取当前树下的文件信息
	for (int i = 0; i < item->childCount(); ++i)
	{
		qDebug() << item->child(i)->text(0);
		m_listInfo.append(item->child(i)->text(0));
	}
	
	//设置行列
	int size = item->childCount();
	ui.tableWidget->setColumnCount(4);
	ui.tableWidget->setRowCount(size);
	ui.tableWidget->hideColumn(3);

	for (int i = 0; i < size; ++i)
	{
		QTableWidgetItem *itemWidget = new QTableWidgetItem(m_listInfo[i]);
		ui.tableWidget->setItem(i, 0, itemWidget);
		itemWidget->setCheckState(Qt::Unchecked);
		
		QString str;
		for (int j = 1; j < 4; ++j)
		{			
			if (parInfo.isEmpty())
			{
				str = strRoot + "/" + m_listInfo[i];
			}
			else
			{
				str = parInfo + "/" + item->text(0) + "/" + m_listInfo[i];
				QFileInfo tmp(str);
				if (tmp.isDir())
				{
					str += "/";
				}
			}

			QFileInfo fileInfo(str);

			if (j == 1)
			{
				if (fileInfo.isDir())
				{
					QTableWidgetItem *itemWidget1 = new QTableWidgetItem(QString("%1").arg(QString::fromLocal8Bit("文件夹")));
					ui.tableWidget->setItem(i, j, itemWidget1);
				}
				else if (fileInfo.isFile())
				{
					QTableWidgetItem *itemWidget1 = new QTableWidgetItem(QString("%1").arg(QString::fromLocal8Bit("文件")));
					ui.tableWidget->setItem(i, j, itemWidget1);
				}
				else
				{
					QTableWidgetItem *itemWidget1 = new QTableWidgetItem(QString("%1").arg(QString::fromLocal8Bit("其他")));
					ui.tableWidget->setItem(i, j, itemWidget1);
				}
				
			}

			if (j == 2)
			{
				QString fileTime = fileInfo.lastModified().toString();

				QTableWidgetItem *itemWidget1 = new QTableWidgetItem(QString("%1").arg(fileTime));
				
				ui.tableWidget->setItem(i, j, itemWidget1);

				/*ui.tableWidget->hideColumn(2);*/
			}

			if (j == 3)
			{
				QString str = parInfo + item->text(0);
				QTableWidgetItem *itemWidget1 = new QTableWidgetItem(QString("%1").arg(str));

				ui.tableWidget->setItem(i, j, itemWidget1);
			}
			
		}

	}
	ui.tableWidget->setHorizontalHeaderLabels(head);
	m_listInfo.clear();
}


void QtTreeView::GetTabWidgetInfoSlots(QTableWidgetItem * item)
{
	
	int i = item->row();
	int j = item->column();
	//qDebug()<< "text:" << item->text();
	//ui.tableWidget->insertRow(1);
	qDebug() << i << " : "<< j;
	//qDebug() << item->data(j).toString();
	qDebug() <<"rowCount" <<ui.tableWidget->rowCount();
	qDebug() << "columnCount" << ui.tableWidget->columnCount();

	m_tabRowNum = ui.tableWidget->rowCount();
	m_tabCoulNum = ui.tableWidget->columnCount();
	m_tabNum = item->row();

	m_listTabInfo.clear();
	//遍历选中行所有信息
	for (int k = 0; k <= 0 /*ui.tableWidget->rowCount()*/; ++k)
	{
		for (int p = 0; p < ui.tableWidget->columnCount(); ++p)
		{
			if (ui.tableWidget->item(i, p) != NULL)
			{
				qDebug() << "+++++++++" << ui.tableWidget->item(i, p)->text();
				QString str = ui.tableWidget->item(i, p)->text();

				m_listTabInfo.append(str);
			}			
			
		}
	}



	//ui.tableWidget->removeRow(i);
}

void QtTreeView::DeleteTabItemSlots()
{
	if (m_tabNum < 0)
	{
		return;
	}

	ui.tableWidget->removeRow(m_tabNum);
}

void QtTreeView::UpTabItemRowSlots()
{
	if (m_tabNum <= 0)
	{
		return;
	}
	QStringList listInfo;
	qDebug() <<"-----------------------------" <<m_tabNum;
	//遍历选中行所有信息
	for (int k = 0; k <= 0 /*ui.tableWidget->rowCount()*/; ++k)
	{
		for (int p = 0; p < ui.tableWidget->columnCount(); ++p)
		{
			if (ui.tableWidget->item(m_tabNum - 1, p) != NULL)
			{
				qDebug() << "+++++++++" << ui.tableWidget->item(m_tabNum - 1, p)->text();
				QString str = ui.tableWidget->item(m_tabNum - 1, p)->text();

				listInfo.append(str);
			}

		}
	}

	//插入新信息
	for (int i = 0; i <= 0; ++i)
	{
		QTableWidgetItem *itemWidget = new QTableWidgetItem(m_listTabInfo[i]);
		ui.tableWidget->setItem(m_tabNum - 1, 0, itemWidget);
		itemWidget->setCheckState(Qt::Unchecked);
		for (int j = 1; j < 3; ++j)
		{
			QTableWidgetItem *itemWidget1 = new QTableWidgetItem(QString("%1").arg(m_listTabInfo[j]));
			ui.tableWidget->setItem(m_tabNum -1, j, itemWidget1);
		}

	}

	//插入旧信息
	for (int i = 0; i <= 0; ++i)
	{
		QTableWidgetItem *itemWidget = new QTableWidgetItem(listInfo[i]);
		ui.tableWidget->setItem(m_tabNum, 0, itemWidget);
		itemWidget->setCheckState(Qt::Unchecked);
		for (int j = 1; j < 3; ++j)
		{
			QTableWidgetItem *itemWidget1 = new QTableWidgetItem(QString("%1").arg(listInfo[j]));
			ui.tableWidget->setItem(m_tabNum, j, itemWidget1);
		}

	}

	m_tabNum--;
	listInfo.clear();
}

void QtTreeView::DownTabItemRowSlots()
{
	if (m_tabNum + 1 >= m_tabRowNum || m_tabRowNum <= 0)
	{
		qDebug() << "----------------------------- error";
		return;
	}

	QStringList listInfo;
	qDebug() << "-----------------------------" << m_tabNum;
	//遍历选中行所有信息
	for (int k = 0; k <= 0 /*ui.tableWidget->rowCount()*/; ++k)
	{
		for (int p = 0; p < ui.tableWidget->columnCount(); ++p)
		{
			if (ui.tableWidget->item(m_tabNum + 1, p) != NULL)
			{
				qDebug() << "+++++++++" << ui.tableWidget->item(m_tabNum + 1, p)->text();
				QString str = ui.tableWidget->item(m_tabNum + 1, p)->text();

				listInfo.append(str);
			}

		}
	}

	//插入新信息
	for (int i = 0; i <= 0; ++i)
	{
		QTableWidgetItem *itemWidget = new QTableWidgetItem(m_listTabInfo[i]);
		ui.tableWidget->setItem(m_tabNum + 1, 0, itemWidget);
		itemWidget->setCheckState(Qt::Unchecked);
		for (int j = 1; j < 3; ++j)
		{
			QTableWidgetItem *itemWidget1 = new QTableWidgetItem(QString("%1").arg(m_listTabInfo[j]));
			ui.tableWidget->setItem(m_tabNum + 1, j, itemWidget1);
		}

	}

	//插入旧信息
	for (int i = 0; i <= 0; ++i)
	{
		QTableWidgetItem *itemWidget = new QTableWidgetItem(listInfo[i]);
		ui.tableWidget->setItem(m_tabNum, 0, itemWidget);
		itemWidget->setCheckState(Qt::Unchecked);
		for (int j = 1; j < 3; ++j)
		{			
			QTableWidgetItem *itemWidget1 = new QTableWidgetItem(QString("%1").arg(listInfo[j]));
			ui.tableWidget->setItem(m_tabNum, j, itemWidget1);
		}

	}

	m_tabNum++;
	listInfo.clear();
}

void QtTreeView::NewTabItemSlots()
{
	/*pm_InfoDialog->setModal(true);
	pm_InfoDialog->show();*/

	//很重要,新建行数加1
	int num = ui.tableWidget->rowCount();
	ui.tableWidget->setRowCount(num + 1);

	QStringList info;
	info << QString::fromLocal8Bit("测试1") << QString::fromLocal8Bit("测试2") << QString::fromLocal8Bit("测试3");
	//插入旧信息
	for (int i = 0; i <= 0; ++i)
	{
		QTableWidgetItem *itemWidget = new QTableWidgetItem(info[i]);
		ui.tableWidget->setItem(num, 0, itemWidget);
		itemWidget->setCheckState(Qt::Unchecked);
		for (int j = 1; j < 3; ++j)
		{
			qDebug() << "++++-++++-------------------+" << info[j];
			QTableWidgetItem *itemWidget1 = new QTableWidgetItem(QString("%1").arg(info[j]));
			ui.tableWidget->setItem(num, j, itemWidget1);
		}

	}

}

//打开显示的文件
void QtTreeView::ShowTabWidgetFileSlots(QTableWidgetItem * pitem)
{
	//路径获取思路,建立一个item, 加入路径信息,不显示,双击的时候,加载路径
	
	QString strInfo = pitem->text();
	
	QString pathInfo = ui.tableWidget->item(pitem->row(), 3)->text();
	QString info = pathInfo + "/" + strInfo;

	if (!info.contains("."))
	{
		return;
	}

	//QString filePath = qApp->applicationDirPath();

	QDesktopServices::openUrl(QUrl::fromLocalFile(info));
}

void QtTreeView::DeleteTreeWiSlots()
{
	//删除某个文件
	QFileInfo tmpInfo("F:/cl/tt.txt");
	if (tmpInfo.isFile())
	{
		tmpInfo.dir().remove(tmpInfo.fileName());
	}

	QTreeWidgetItem *pCurrentItem = ui.treeWidget->currentItem();
	
	if (pCurrentItem == NULL)
	{
		return;
	}

	if (pCurrentItem->parent() == NULL)
	{
		delete ui.treeWidget->takeTopLevelItem(ui.treeWidget->currentIndex().row());
	}
	else
	{
		qDebug() << "---------------============== " << pCurrentItem->childCount();
		
		for (int i = m_count - 1; i >= 0; i--)
		{
			//pCurrentItem->text(i);
			pCurrentItem->takeChild(i);
		}
		//delete pCurrentItem->takeChild(ui.treeWidget->currentIndex().row());
		delete pCurrentItem;
	}

	
}

void QtTreeView::GetTreeWigetInfo(QTreeWidgetItem *pitem, int column)
{
	 m_count = pitem->childCount();
}

void QtTreeView::NewTreeWidgetSlots()
{
	pm_treeWg->setModal(true);
	pm_treeWg->show();
}

void QtTreeView::GetNewTreeWgInfoSlots(QStringList infoList)
{
	int sizeList = infoList.size();
	QTreeWidgetItem *root = NULL;
	QTreeWidgetItem *child1 = NULL;
	QTreeWidgetItem *child2 = NULL;
	QTreeWidgetItem *child3 = NULL;
	QTreeWidgetItem *child4 = NULL;
	for (int i = 0; i < sizeList; i++)
	{

		int icount = infoList[i].count("+");
		qDebug() << icount;
		switch (icount)
		{
		case 0:
		{
			root = new QTreeWidgetItem(ui.treeWidget);
			root->setText(0, infoList[i]);
			root->setIcon(0, QIcon("icon.PNG"));
			root->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
		}break;
		case 1:
		{
			int num = infoList[i].size();

			if (num > 0 && root == NULL)
			{
				QMessageBox::warning(this, "error", "the parent is NULL");
				return;
			}
			child1 = new QTreeWidgetItem(QStringList() << infoList[i].right(num - 1));
			child1->setIcon(0, QIcon("icon.PNG"));
			root->addChild(child1);
		}break;
		case 2:
		{
			int num = infoList[i].size();
			if (num > 0 && child1 == NULL)
			{
				QMessageBox::warning(this, "error", "the parent is NULL");
				return;
			}
			child2 = new QTreeWidgetItem(QStringList() << infoList[i].right(num - 2));
			child2->setIcon(0, QIcon("icon.PNG"));
			child1->addChild(child2);
		}break;
		case 3:
		{
			int num = infoList[i].size();
			if (num > 0 && child2 == NULL)
			{
				QMessageBox::warning(this, "error", "the parent is NULL");
				return;
			}
			child3 = new QTreeWidgetItem(QStringList() << infoList[i].right(num - 3));
			child3->setIcon(0, QIcon("icon.PNG"));
			child2->addChild(child3);
		}break;
		case 4:
		{
			int num = infoList[i].size();
			if (num > 0 && child3 == NULL)
			{
				QMessageBox::warning(this, "error", "the parent is NULL");
				return;
			}
			child4 = new QTreeWidgetItem(QStringList() << infoList[i].right(num - 4));
			child4->setIcon(0, QIcon("icon.PNG"));
			child3->addChild(child4);
		}break;
		default:
			break;
		}
	}
}

void QtTreeView::EditTreeWgSlots()
{
	if (m_count < 0)
	{
		return;
	}

	ui.treeWidget->currentItem()->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
}


treewgdialog.h

#ifndef TREEWGDIALOG_H
#define TREEWGDIALOG_H

#include <QDialog>
#include <QDebug>
#include <QStringList>
#include <QTextBlock>
#include "ui_treewgdialog.h"

class TreeWGDialog : public QDialog
{
	Q_OBJECT

signals:
	void TreeWgInfoSig(QStringList);
	

public:
	QStringList m_infoList; 
public:
	TreeWGDialog(QWidget *parent = 0);
	~TreeWGDialog();
	void InitValue();
	void MakeConnect();

public slots:
	void SetTreeWgInfoSlots();
	void CancleTreeInfoSlots();

private:
	Ui::TreeWGDialog ui;
};

#endif // TREEWGDIALOG_H

treewgdialog.cpp

#include "treewgdialog.h"

TreeWGDialog::TreeWGDialog(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);

	InitValue();
	MakeConnect();

}

TreeWGDialog::~TreeWGDialog()
{

}


void TreeWGDialog::InitValue()
{
	/*ui.listWidget_INFO->insertItem(0, QString::fromLocal8Bit("设备1"));
	ui.listWidget_INFO->insertItem(1, QString::fromLocal8Bit("设备2"));
	ui.listWidget_INFO->insertItem(2, QString::fromLocal8Bit("设备3"));
	ui.listWidget_INFO->insertItem(3, QString::fromLocal8Bit("设备4"));*/

}

void TreeWGDialog::MakeConnect()
{
	connect(ui.pushButton_SAVETreeInfo, SIGNAL(clicked()), this, SLOT(SetTreeWgInfoSlots()));
	connect(ui.pushButton_CANCLETree, SIGNAL(clicked()), this, SLOT(CancleTreeInfoSlots()));
}

void TreeWGDialog::SetTreeWgInfoSlots()
{
	qDebug() << ui.plainTextEdit->blockCount();

	//int count = ui.listWidget_INFO->count();
	int count = ui.plainTextEdit->blockCount();

	qDebug() << count;  

	m_infoList.clear();

	//每行内容
	for (int i = 0; i < count; ++i)
	{
		QString tmp = ui.plainTextEdit->document()->findBlockByLineNumber(i).text();
		qDebug() << tmp;
		m_infoList.append(tmp);
	}

	if (m_infoList[0].isEmpty())
	{
		this->close();
		return;
	}

	emit TreeWgInfoSig(m_infoList);

	this->close();
}

void TreeWGDialog::CancleTreeInfoSlots()
{
	ui.plainTextEdit->clear();
	this->close();
}

main.cpp

#include "qttreeview.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	QtTreeView w;
	w.show();
	return a.exec();
}

infodialog.ui
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>InfoDialog</class>
 <widget class="QDialog" name="InfoDialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>123</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>InfoDialog</string>
  </property>
  <layout class="QGridLayout" name="gridLayout_2">
   <item row="0" column="0">
    <layout class="QGridLayout" name="gridLayout">
     <item row="0" column="0">
      <widget class="QLabel" name="label">
       <property name="text">
        <string>1         </string>
       </property>
      </widget>
     </item>
     <item row="0" column="1">
      <widget class="QLineEdit" name="lineEdit"/>
     </item>
     <item row="1" column="0">
      <widget class="QLabel" name="label_2">
       <property name="text">
        <string>2</string>
       </property>
      </widget>
     </item>
     <item row="1" column="1">
      <widget class="QLineEdit" name="lineEdit_2"/>
     </item>
     <item row="2" column="0">
      <widget class="QLabel" name="label_3">
       <property name="text">
        <string>3</string>
       </property>
      </widget>
     </item>
     <item row="2" column="1">
      <widget class="QLineEdit" name="lineEdit_3"/>
     </item>
    </layout>
   </item>
   <item row="1" column="0">
    <layout class="QHBoxLayout" name="horizontalLayout">
     <item>
      <widget class="QPushButton" name="pushButton_OK">
       <property name="text">
        <string>确定</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="pushButton_CANCLE">
       <property name="text">
        <string>取消</string>
       </property>
      </widget>
     </item>
    </layout>
   </item>
  </layout>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

qttreewiew.ui
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>QtTreeViewClass</class>
 <widget class="QWidget" name="QtTreeViewClass">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>799</width>
    <height>639</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>QtTreeView</string>
  </property>
  <layout class="QGridLayout" name="gridLayout_3">
   <item row="0" column="0">
    <layout class="QHBoxLayout" name="horizontalLayout_2">
     <item>
      <widget class="QPushButton" name="pushButton_TreeWNEW">
       <property name="text">
        <string>新建</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="pushButton_TreeWEDIT">
       <property name="text">
        <string>编辑</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="pushButton_TreeWDEL">
       <property name="text">
        <string>删除</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="pushButton_TreeWUP">
       <property name="text">
        <string>上移</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="pushButton_TreeWDOWN">
       <property name="text">
        <string>下移</string>
       </property>
      </widget>
     </item>
    </layout>
   </item>
   <item row="1" column="0" colspan="2">
    <widget class="QTreeWidget" name="treeWidget">
     <column>
      <property name="text">
       <string notr="true">1</string>
      </property>
     </column>
    </widget>
   </item>
   <item row="2" column="0">
    <layout class="QGridLayout" name="gridLayout_2">
     <item row="0" column="0">
      <layout class="QHBoxLayout" name="horizontalLayout">
       <item>
        <widget class="QPushButton" name="pushButton_TabWNEW">
         <property name="text">
          <string>新建</string>
         </property>
        </widget>
       </item>
       <item>
        <widget class="QPushButton" name="pushButton_TabWUP">
         <property name="text">
          <string>上移</string>
         </property>
        </widget>
       </item>
       <item>
        <widget class="QPushButton" name="pushButton_TabWDOWN">
         <property name="text">
          <string>下移</string>
         </property>
        </widget>
       </item>
       <item>
        <widget class="QPushButton" name="pushButton_TabWDELETE">
         <property name="text">
          <string>删除</string>
         </property>
        </widget>
       </item>
      </layout>
     </item>
     <item row="1" column="0">
      <widget class="QTableWidget" name="tableWidget"/>
     </item>
    </layout>
   </item>
   <item row="2" column="1">
    <layout class="QGridLayout" name="gridLayout">
     <item row="0" column="2">
      <widget class="QPushButton" name="pushButton_DOWN">
       <property name="text">
        <string>下移</string>
       </property>
      </widget>
     </item>
     <item row="0" column="0">
      <widget class="QPushButton" name="pushButton_NEW">
       <property name="text">
        <string>新建</string>
       </property>
      </widget>
     </item>
     <item row="0" column="3">
      <widget class="QPushButton" name="pushButton_DELETE">
       <property name="text">
        <string>删除</string>
       </property>
      </widget>
     </item>
     <item row="0" column="1">
      <widget class="QPushButton" name="pushButton_UP">
       <property name="text">
        <string>上移</string>
       </property>
      </widget>
     </item>
     <item row="1" column="0" colspan="4">
      <widget class="QTreeView" name="treeView">
       <property name="frameShape">
        <enum>QFrame::StyledPanel</enum>
       </property>
      </widget>
     </item>
    </layout>
   </item>
  </layout>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources>
  <include location="qttreeview.qrc"/>
 </resources>
 <connections/>
</ui>

treewgdialog.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>TreeWGDialog</class>
 <widget class="QDailog" name="TreeWGDialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>506</width>
    <height>476</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>TreeWGDialog</string>
  </property>
  <layout class="QGridLayout" name="gridLayout">
   <item row="1" column="1">
    <widget class="QPushButton" name="pushButton_CANCLETree">
     <property name="text">
      <string>取消</string>
     </property>
    </widget>
   </item>
   <item row="0" column="0" colspan="2">
    <widget class="QPlainTextEdit" name="plainTextEdit"/>
   </item>
   <item row="1" column="0">
    <widget class="QPushButton" name="pushButton_SAVETreeInfo">
     <property name="text">
      <string>保存</string>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <customwidgets>
  <customwidget>
   <class>QDialog</class>
   <extends>QWidget</extends>
   <header>qdialog.h</header>
   <container>1</container>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值