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>