参考<<C++ GUI Programming with Qt4>>中文版第二版中的例子"DirectoryViewer",简单介绍QFileSystemModel的用法,QFileSystemModel 类似QDitModel,只不过Qt不推荐使用QDirModel,推荐是使用QFileSystemModel,该模型允许我们在view中显示操作系统的目录结构。
directoryviewer.h文件:
#ifndef DIRECTORYVIEWER_H
#define DIRECTORYVIEWER_H
#include <QtGui/QDialog>
#include <QFileSystemModel>
#include <QTreeView>
class DirectoryViewer : public QDialog
{
Q_OBJECT
public:
DirectoryViewer(QWidget *parent = 0);
~DirectoryViewer();
private slots:
void createDirectory();
void remove();
private:
QFileSystemModel *model;
QTreeView *treeView;
};
#endif
directoryviewer.cpp文件:
#include "directoryviewer.h"
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QHeaderView>
#include <QInputDialog>
#include <QMessageBox>
DirectoryViewer::DirectoryViewer(QWidget *parent)
: QDialog(parent)
{
model = new QFileSystemModel;
model->setReadOnly(false); //设置可以修改
model->setRootPath(QDir::currentPath());
treeView = new QTreeView;
treeView->setModel(model);
treeView->header()->setStretchLastSection(true);
treeView->header()->setSortIndicator(0, Qt::AscendingOrder);
treeView->header()->setSortIndicatorShown(true);
treeView->header()->setClickable(true);
QModelIndex index = model->index(QDir::currentPath());
treeView->expand(index); //当前项展开
treeView->scrollTo(index); //定位到当前项
treeView->resizeColumnToContents(0);
QPushButton *createButton = new QPushButton("Create Directory", this);
QPushButton *removeButton = new QPushButton("Remove", this);
QHBoxLayout *hlayout = new QHBoxLayout;
hlayout->addWidget(createButton);
hlayout->addWidget(removeButton);
QVBoxLayout *vlayout = new QVBoxLayout;
vlayout->addWidget(treeView);
vlayout->addLayout(hlayout);
setLayout(vlayout);
connect(createButton, SIGNAL(clicked()), this, SLOT(createDirectory()));
connect(removeButton, SIGNAL(clicked()), this, SLOT(remove()));
}
DirectoryViewer::~DirectoryViewer()
{
}
void DirectoryViewer::createDirectory()
{
QModelIndex index = treeView->currentIndex();
if (!index.isValid())
{
return;
}
QString dirName = QInputDialog::getText(this, tr("Create Directory"), tr("Directory name"));
if (!dirName.isEmpty())
{
if (!model->mkdir(index, dirName).isValid())
{
QMessageBox::information(this, tr("Create Directory"), tr("Failed to create the directory"));
}
}
}
void DirectoryViewer::remove()
{
QModelIndex index = treeView->currentIndex();
if (!index.isValid())
{
return;
}
bool ok;
if (model->fileInfo(index).isDir())
{
ok = model->rmdir(index);
}
else
{
ok = model->remove(index);
}
if (!ok)
{
QMessageBox::information(this, tr("Remove"), tr("Failed to remove %1").arg(model->fileName(index)));
}
}
main.cpp文件:
#include <QtGui/QApplication>
#include "directoryviewer.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
DirectoryViewer w;
w.show();
w.setWindowTitle("QFileSystemModel Demo");
return a.exec();
}
运行界面:
原文链接: https://www.cnblogs.com/venow/archive/2012/10/18/2730063.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/66272
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!