1 2 3 下一页 今天我们来看一个很有用的model:QDirModel。这个model允许我们在view中显示操作系统的目录结构。这次让我们先来看看运行结果: 这个界面很熟悉吧?不过这可不是由QFileDialog打开的哦,这是我们自己实现的。而提供这种实现支持的,就是QDirModel和QTreeView。我们来看一下代码。 mytreeview.h #ifndef MYLISTVIEW_H #define MYLISTVIEW_H #include <QtGui> class MyTreeView : public QWidget { Q_OBJECT public: MyTreeView(); private: QDirModel *model; QTreeView *treeView; private slots: void mkdir(); void rm(); }; #endif // MYLISTVIEW_H mytreeview.cpp #include "mylistview.h" MyTreeView::MyTreeView() { model = new QDirModel; model->setReadOnly(false); model->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name); 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); QHBoxLayout *btnLayout = new QHBoxLayout; QPushButton *createBtn = new QPushButton(tr("Create Directory...")); QPushButton *delBtn = new QPushButton(tr("Remove")); btnLayout->addWidget(createBtn); btnLayout->addWidget(delBtn); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->addWidget(treeView); mainLayout->addLayout(btnLayout); this->setLayout(mainLayout); connect(createBtn, SIGNAL(clicked()), this, SLOT(mkdir())); connect(delBtn, SIGNAL(clicked()), this, SLOT(rm())); } void MyTreeView::mkdir() { 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 MyTreeView::rm() { 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))); } }
(责任编辑:admin) |