使用 ui 和带有 qt 的 QTreeWidget 浏览目录
Browsing Directory Using ui and QTreeWidget with qt
我用 QT 设计器创建了一个 ui。
其中 ui 我使用一个按钮浏览目录,一个 lineedit 用于显示 select 目录路径文本,另一个按钮用于确定,这 3 个小部件和一个 treewidget 放在一个水平的分组框。
我想知道的是,如果我浏览并单击“确定”按钮,那么我想在 ui
上显示该路径的树视图
我的 test1.h 文件包含
#ifndef LINEEDIT_H
#define LINEEDIT_H
#include <QtGui>
#include "ui_line1.h"
#include <stdlib.h>
#include <iostream>
using namespace Ui;
class line : public QMainWindow
{
Q_OBJECT
public:
line(QWidget *parent = 0);
QTreeWidget(parent);
void viewer(QTreeWidgetItem* item,QString filePath);
private:
Ui::lineedit ui;
QDirModel *model;
public slots:
void browse();
void treeview();
void showDirectory(QTreeWidgetItem* item, int /*column*/);
};
#endif // LINEEDIT_H
我的 test1.cpp 文件包含
#include "test1.h"
#include <QTreeWidget>
#include <QtGui>
#include <stdlib.h>
#include <iostream>
#include<QWidget>
#include<QTreeWidgetItem>
line::line(QWidget* parent)
{
ui.setupUi(this);
connect(ui.browse, SIGNAL(clicked()), this,SLOT(browse()));
connect(ui.ok, SIGNAL(clicked()), this,SLOT(treeview()));
connect(this , SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(showDirectory(QTreeWidgetItem*,int)));
}
void line::browse()
{
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
"/home",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
ui.lineEdit->setText(dir);
}
void line::treeview()
{
QWidget *centralWidget = new QWidget();
line *tree = new line (centralWidget);
tree->setFixedSize(395,395);
QTreeWidgetItem* headerItem = new QTreeWidgetItem();
headerItem->setText(0,QString("File Name"));
headerItem->setText(1,QString("Size (Bytes)"));
headerItem->setText(2,QString("Path"));
ui.treeWidget->setHeaderItem(headerItem);
ui.treeWidget->setColumnCount(2);
//ui.treeView->
//setHeaderItem(headerItem);
QString strdir=ui.lineEdit->text();
QDir* rootDir = new QDir(strdir);
QFileInfoList filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
item->setText(1,QString::number(fileInfo.size()));
item->setIcon(0,*(new QIcon("file.jpg")));
}
if(fileInfo.isDir())
{
item->setIcon(0,*(new QIcon("folder.jpg")));
viewer(item,fileInfo.filePath());
}
item->setText(2,fileInfo.filePath());
ui.treeWidget->addTopLevelItem(item);
}
QPalette* palette = new QPalette();
palette->setColor(QPalette::Base,Qt::red);
ui.treeWidget->setPalette(*(palette));
/*window->setCentralWidget(centralWidget);*/
/*ui.treeWidget->addTopLevelItem(centralWidget);*/
/*window->show();*/
return treeview();
}
void line::viewer(QTreeWidgetItem* item,QString filePath)
{
QDir* rootDir = new QDir(filePath);
QFileInfoList filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
child->setText(1,QString::number(fileInfo.size()));
}
if(fileInfo.isDir())
{
child->setIcon(0,*(new QIcon("folder.jpg")));
child->setText(2,fileInfo.filePath());
}
item->addChild(child);
}
}
void line::showDirectory(QTreeWidgetItem* item, int )
{
QDir* rootDir = new QDir(item->text(2));
QFileInfoList filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
child->setText(1,QString::number(fileInfo.size()));
child->setIcon(0,*(new QIcon("file.jpg")));
}
if(fileInfo.isDir())
{
child->setIcon(0,*(new QIcon("folder.jpg")));
child->setText(2,fileInfo.filePath());
}
item->addChild(child);
/*resizeColumnToContents(0);*/
}
}
main.cpp 包含
#include "test1.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
line w;
w.show();
return a.exec();
}
我没有得到输出,同时我正在检查调试点,每一件事都很好,但没有在 ui treewidget
上得到输出
这可行吗,请帮我修改我的代码。
谢谢大家
test1.cppfile:
#include "test1.h"
#include <QTreeWidget>
#include <QtGui>
#include <stdlib.h>
#include <iostream>
#include<QWidget>
#include<QTreeWidgetItem>
line::line(QWidget* parent)
{
ui.setupUi(this);
connect(ui.browse, SIGNAL(clicked()), this,SLOT(browse()));
connect(ui.ok, SIGNAL(clicked()), this,SLOT(treeview()));
connect(this , SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(showDirectory(QTreeWidgetItem*,int)));
}
void line::browse()
{
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
"/home",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
ui.lineEdit->setText(dir);
}
void line::treeview()
{
QString strdir=ui.lineEdit->text();
QDir* rootDir = new QDir(strdir);
QFileInfoList filesList = rootDir->entryInfoList();
/*QTreeWidgetItem* item = new QTreeWidgetItem();*/
ui.treeWidget->setColumnCount(1);
QList<QTreeWidgetItem *> items;
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
item->setText(1,QString::number(fileInfo.size()));
item->setIcon(0,*(new QIcon("file.jpg")));
/*treeItem->setCurrentItem(item);*/
}
if(fileInfo.isDir())
{
item->setIcon(0,*(new QIcon("folder.jpg")));
viewer(item,fileInfo.filePath());
}
item->setText(2,fileInfo.filePath());
ui.treeWidget->addTopLevelItem(item);
/* ui.treeWidget->insertTopLevelItems(0, item);*/
items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1"))));
ui.treeWidget->insertTopLevelItems(0, items);
}
}
void line::viewer(QTreeWidgetItem* item,QString filePath)
{
QDir* rootDir = new QDir(filePath);
QFileInfoList filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
child->setText(1,QString::number(fileInfo.size()));
}
if(fileInfo.isDir())
{
child->setIcon(0,*(new QIcon("folder.jpg")));
child->setText(2,fileInfo.filePath());
}
item->addChild(child);
ui.treeWidget->addTopLevelItem(item);
}
}
void line::showDirectory(QTreeWidgetItem* item, int )
{
QDir* rootDir = new QDir(item->text(2));
QFileInfoList filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
child->setText(1,QString::number(fileInfo.size()));
child->setIcon(0,*(new QIcon("file.jpg")));
}
if(fileInfo.isDir())
{
child->setIcon(0,*(new QIcon("folder.jpg")));
child->setText(2,fileInfo.filePath());
}
item->addChild(child);
ui.treeWidget->addTopLevelItem(item);
/*resizeColumnToContents(0);*/
}
}
test1.h 文件:
#ifndef LINEEDIT_H
#define LINEEDIT_H
#include <QtGui>
#include "ui_line1.h"
#include <stdlib.h>
#include <iostream>
using namespace Ui;
class line : public QMainWindow
{
Q_OBJECT
public:
line(QWidget *parent = 0);
QTreeWidget(parent);
void viewer(QTreeWidgetItem* item,QString filePath);
private:
Ui::lineedit ui;
QDirModel *model;
public slots:
void browse();
void treeview();
void showDirectory(QTreeWidgetItem* item, int /*column*/);
};
#endif // LINEEDIT_H
main.cpp 文件:
#include "test1.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
line w;
w.show();
return a.exec();
}
我用 QT 设计器创建了一个 ui。
其中 ui 我使用一个按钮浏览目录,一个 lineedit 用于显示 select 目录路径文本,另一个按钮用于确定,这 3 个小部件和一个 treewidget 放在一个水平的分组框。
我想知道的是,如果我浏览并单击“确定”按钮,那么我想在 ui
上显示该路径的树视图我的 test1.h 文件包含
#ifndef LINEEDIT_H
#define LINEEDIT_H
#include <QtGui>
#include "ui_line1.h"
#include <stdlib.h>
#include <iostream>
using namespace Ui;
class line : public QMainWindow
{
Q_OBJECT
public:
line(QWidget *parent = 0);
QTreeWidget(parent);
void viewer(QTreeWidgetItem* item,QString filePath);
private:
Ui::lineedit ui;
QDirModel *model;
public slots:
void browse();
void treeview();
void showDirectory(QTreeWidgetItem* item, int /*column*/);
};
#endif // LINEEDIT_H
我的 test1.cpp 文件包含
#include "test1.h"
#include <QTreeWidget>
#include <QtGui>
#include <stdlib.h>
#include <iostream>
#include<QWidget>
#include<QTreeWidgetItem>
line::line(QWidget* parent)
{
ui.setupUi(this);
connect(ui.browse, SIGNAL(clicked()), this,SLOT(browse()));
connect(ui.ok, SIGNAL(clicked()), this,SLOT(treeview()));
connect(this , SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(showDirectory(QTreeWidgetItem*,int)));
}
void line::browse()
{
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
"/home",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
ui.lineEdit->setText(dir);
}
void line::treeview()
{
QWidget *centralWidget = new QWidget();
line *tree = new line (centralWidget);
tree->setFixedSize(395,395);
QTreeWidgetItem* headerItem = new QTreeWidgetItem();
headerItem->setText(0,QString("File Name"));
headerItem->setText(1,QString("Size (Bytes)"));
headerItem->setText(2,QString("Path"));
ui.treeWidget->setHeaderItem(headerItem);
ui.treeWidget->setColumnCount(2);
//ui.treeView->
//setHeaderItem(headerItem);
QString strdir=ui.lineEdit->text();
QDir* rootDir = new QDir(strdir);
QFileInfoList filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
item->setText(1,QString::number(fileInfo.size()));
item->setIcon(0,*(new QIcon("file.jpg")));
}
if(fileInfo.isDir())
{
item->setIcon(0,*(new QIcon("folder.jpg")));
viewer(item,fileInfo.filePath());
}
item->setText(2,fileInfo.filePath());
ui.treeWidget->addTopLevelItem(item);
}
QPalette* palette = new QPalette();
palette->setColor(QPalette::Base,Qt::red);
ui.treeWidget->setPalette(*(palette));
/*window->setCentralWidget(centralWidget);*/
/*ui.treeWidget->addTopLevelItem(centralWidget);*/
/*window->show();*/
return treeview();
}
void line::viewer(QTreeWidgetItem* item,QString filePath)
{
QDir* rootDir = new QDir(filePath);
QFileInfoList filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
child->setText(1,QString::number(fileInfo.size()));
}
if(fileInfo.isDir())
{
child->setIcon(0,*(new QIcon("folder.jpg")));
child->setText(2,fileInfo.filePath());
}
item->addChild(child);
}
}
void line::showDirectory(QTreeWidgetItem* item, int )
{
QDir* rootDir = new QDir(item->text(2));
QFileInfoList filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
child->setText(1,QString::number(fileInfo.size()));
child->setIcon(0,*(new QIcon("file.jpg")));
}
if(fileInfo.isDir())
{
child->setIcon(0,*(new QIcon("folder.jpg")));
child->setText(2,fileInfo.filePath());
}
item->addChild(child);
/*resizeColumnToContents(0);*/
}
}
main.cpp 包含
#include "test1.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
line w;
w.show();
return a.exec();
}
我没有得到输出,同时我正在检查调试点,每一件事都很好,但没有在 ui treewidget
上得到输出这可行吗,请帮我修改我的代码。
谢谢大家
test1.cppfile:
#include "test1.h"
#include <QTreeWidget>
#include <QtGui>
#include <stdlib.h>
#include <iostream>
#include<QWidget>
#include<QTreeWidgetItem>
line::line(QWidget* parent)
{
ui.setupUi(this);
connect(ui.browse, SIGNAL(clicked()), this,SLOT(browse()));
connect(ui.ok, SIGNAL(clicked()), this,SLOT(treeview()));
connect(this , SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(showDirectory(QTreeWidgetItem*,int)));
}
void line::browse()
{
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
"/home",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
ui.lineEdit->setText(dir);
}
void line::treeview()
{
QString strdir=ui.lineEdit->text();
QDir* rootDir = new QDir(strdir);
QFileInfoList filesList = rootDir->entryInfoList();
/*QTreeWidgetItem* item = new QTreeWidgetItem();*/
ui.treeWidget->setColumnCount(1);
QList<QTreeWidgetItem *> items;
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
item->setText(1,QString::number(fileInfo.size()));
item->setIcon(0,*(new QIcon("file.jpg")));
/*treeItem->setCurrentItem(item);*/
}
if(fileInfo.isDir())
{
item->setIcon(0,*(new QIcon("folder.jpg")));
viewer(item,fileInfo.filePath());
}
item->setText(2,fileInfo.filePath());
ui.treeWidget->addTopLevelItem(item);
/* ui.treeWidget->insertTopLevelItems(0, item);*/
items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1"))));
ui.treeWidget->insertTopLevelItems(0, items);
}
}
void line::viewer(QTreeWidgetItem* item,QString filePath)
{
QDir* rootDir = new QDir(filePath);
QFileInfoList filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
child->setText(1,QString::number(fileInfo.size()));
}
if(fileInfo.isDir())
{
child->setIcon(0,*(new QIcon("folder.jpg")));
child->setText(2,fileInfo.filePath());
}
item->addChild(child);
ui.treeWidget->addTopLevelItem(item);
}
}
void line::showDirectory(QTreeWidgetItem* item, int )
{
QDir* rootDir = new QDir(item->text(2));
QFileInfoList filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0,fileInfo.fileName());
if(fileInfo.isFile())
{
child->setText(1,QString::number(fileInfo.size()));
child->setIcon(0,*(new QIcon("file.jpg")));
}
if(fileInfo.isDir())
{
child->setIcon(0,*(new QIcon("folder.jpg")));
child->setText(2,fileInfo.filePath());
}
item->addChild(child);
ui.treeWidget->addTopLevelItem(item);
/*resizeColumnToContents(0);*/
}
}
test1.h 文件:
#ifndef LINEEDIT_H
#define LINEEDIT_H
#include <QtGui>
#include "ui_line1.h"
#include <stdlib.h>
#include <iostream>
using namespace Ui;
class line : public QMainWindow
{
Q_OBJECT
public:
line(QWidget *parent = 0);
QTreeWidget(parent);
void viewer(QTreeWidgetItem* item,QString filePath);
private:
Ui::lineedit ui;
QDirModel *model;
public slots:
void browse();
void treeview();
void showDirectory(QTreeWidgetItem* item, int /*column*/);
};
#endif // LINEEDIT_H
main.cpp 文件:
#include "test1.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
line w;
w.show();
return a.exec();
}