我们可以根据系统的对话框显示内容,我们自己创建一些类似功能的界面,代码相对简单如下:
头文件:
#ifndef CUSTOMDELETEFILEDIALOG_HPP
#define CUSTOMDELETEFILEDIALOG_HPP
#include <QDialog>
#include <QFileSystemModel>
#include <QDirModel>
#include <QDir>
#include <QDateTime>
#include <QStandardItemModel>
#include <QScrollBar>
#include "common/ui_customdeletefiledialog.h"
namespace Ui {
class customDeleteFileDialog;
}
class customDeleteFileDialog : public QDialog
{
Q_OBJECT
public:
explicit customDeleteFileDialog(QWidget *parent = 0);
~customDeleteFileDialog();
void interface_init(QString currentOpenFile);
Q_SIGNALS:
void notSelectedDeleteFile();
void deleteCurrentOpenFile();
void deleteFileFault();
void deleteFileSucceed();
private Q_SLOTS:
void on_cancelPushButton_clicked();
void on_dirTreeView_clicked(const QModelIndex &index);
void on_filterComboBox_currentIndexChanged(const QString &arg1);
void on_removePushButton_clicked();
private:
Ui::customDeleteFileDialog *ui;
void insideInitialize();
void buttonSetStyleSheet();
void dirTreeViewInitialize();
void setSelectDirectory(const QString& path);
void fileTableViewInitialize();
void setSelectFilePath(const QString& path, const QStringList &nameFilter);
void filterFileComboBox();
QString pushButton_Background_Blue_Color_White;
QString pushButton_Background_green_Color_black;
QDirModel* dirModel;
// QFileSystemModel* fileModel;
QStandardItemModel* fileTableViewModel;
QString tableViewScrollStyleVertical;
QString tableViewScrollStylehorizontal;
QString currentProgrammerOpenFile;
};
#endif // CUSTOMDELETEFILEDIALOG_HPP
//.cpp文件
#include "customdeletefiledialog.hpp"
customDeleteFileDialog::customDeleteFileDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::customDeleteFileDialog),
dirModel(new QDirModel()),
// fileModel(new QFileSystemModel()),
fileTableViewModel(new QStandardItemModel())
{
ui->setupUi(this);
pushButton_Background_Blue_Color_White = "QPushButton{color: white;background-color:blue;}";
pushButton_Background_green_Color_black = "QPushButton{color: black;background-color:rgb(0, 255, 0, 200);}";
tableViewScrollStyleVertical = "QScrollBar::vertical{min-width:20px; QScrollBar::handle::vertical{min-width:15px};}";
tableViewScrollStylehorizontal = "QScrollBar::horizontal{min-height:20px; QScrollBar::handle::horizontal{min-height:15px};}";
insideInitialize();
}
customDeleteFileDialog::~customDeleteFileDialog()
{
delete ui;
}
void customDeleteFileDialog::interface_init(QString currentOpenFile)
{
currentProgrammerOpenFile = currentOpenFile;
QDir dirPath = QDir("./");
QString path = dirPath.absolutePath() + "/save";
setSelectDirectory(path);
QStringList stringList;
stringList.clear();
stringList.append(ui->filterComboBox->currentText());
setSelectFilePath(path, stringList);
}
void customDeleteFileDialog::on_cancelPushButton_clicked()
{
this->reject();
}
void customDeleteFileDialog::insideInitialize()
{
dirTreeViewInitialize();
fileTableViewInitialize();
filterFileComboBox();
}
void customDeleteFileDialog::buttonSetStyleSheet()
{
ui->removePushButton->setStyleSheet(pushButton_Background_Blue_Color_White);
ui->cancelPushButton->setStyleSheet(pushButton_Background_Blue_Color_White);
}
void customDeleteFileDialog::dirTreeViewInitialize()
{
dirModel->setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::CaseSensitive);
ui->dirTreeView->setModel(dirModel);
int column = dirModel->columnCount();
for(int i=1; i<column; ++i)
{
ui->dirTreeView->setColumnHidden(i, true);
}
ui->dirTreeView->setColumnWidth(0,300);
}
void customDeleteFileDialog::setSelectDirectory(const QString &path)
{
QModelIndex modelIndex = dirModel->index(path);
ui->dirTreeView->setCurrentIndex(modelIndex);
}
void customDeleteFileDialog::fileTableViewInitialize()
{
fileTableViewModel->setColumnCount(4);
fileTableViewModel->setRowCount(0);
QStringList fileTableViewTitle;
fileTableViewTitle.clear();
fileTableViewTitle<<"Name"<<"Size(bytes)"<<"Type"<<"Date Modified";
fileTableViewModel->setHorizontalHeaderLabels(fileTableViewTitle);
ui->fileTableView->setModel(fileTableViewModel);
ui->fileTableView->setColumnWidth(0, 150);
ui->fileTableView->setColumnWidth(1, 80);
ui->fileTableView->setColumnWidth(2, 80);
ui->fileTableView->setColumnWidth(3, 150);
QHeaderView* headView = ui->fileTableView->horizontalHeader();
headView->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter);
headView->setClickable(false);
ui->fileTableView->verticalScrollBar()->setStyleSheet(tableViewScrollStyleVertical);
ui->fileTableView->horizontalScrollBar()->setStyleSheet(tableViewScrollStylehorizontal);
ui->fileTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->fileTableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->fileTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
void customDeleteFileDialog::setSelectFilePath(const QString &path, const QStringList &nameFilter)
{
QDir selectDir(path);
QFileInfoList fileInfoList = selectDir.entryInfoList(nameFilter, QDir::Files);
int rowCount = fileTableViewModel->rowCount();
fileTableViewModel->removeRows(0, rowCount);
int fileCount = fileInfoList.count();
for(int i=0; i<fileCount; ++i)
{
fileTableViewModel->insertRow(i);
QFileInfo fileInfo = fileInfoList.at(i);
QModelIndex modelIndex = fileTableViewModel->index(i, 0);
fileTableViewModel->setData(modelIndex,QVariant(fileInfo.fileName()), Qt::DisplayRole);
modelIndex = fileTableViewModel->index(i, 1);
fileTableViewModel->setData(modelIndex,QVariant(fileInfo.size()), Qt::DisplayRole);
modelIndex = fileTableViewModel->index(i, 2);
QFileSystemModel tempFileModel;
QModelIndex tempFileModelIndex = tempFileModel.index(fileInfo.absoluteFilePath());
fileTableViewModel->setData(modelIndex,QVariant(tempFileModel.type(tempFileModelIndex)), Qt::DisplayRole);
modelIndex = fileTableViewModel->index(i, 3);
fileTableViewModel->setData(modelIndex,QVariant(fileInfo.lastModified()), Qt::DisplayRole);
}
}
void customDeleteFileDialog::filterFileComboBox()
{
ui->filterComboBox->addItem("*");
ui->filterComboBox->addItem("*.txt");
ui->filterComboBox->setCurrentIndex(1);
}
void customDeleteFileDialog::on_dirTreeView_clicked(const QModelIndex &index)
{
QString path = dirModel->filePath(index);
QStringList stringList;
stringList.clear();
stringList.append(ui->filterComboBox->currentText());
setSelectFilePath(path, stringList);
}
void customDeleteFileDialog::on_filterComboBox_currentIndexChanged(const QString &arg1)
{
QModelIndex modelIndex = ui->dirTreeView->currentIndex();
QString path = dirModel->filePath(modelIndex);
QStringList stringList;
stringList.clear();
stringList.append(arg1);
setSelectFilePath(path, stringList);
}
void customDeleteFileDialog::on_removePushButton_clicked()
{
QModelIndex fileModelIndex = ui->fileTableView->currentIndex();
int fileTableViewSelectedRow = fileModelIndex.row();
if(fileTableViewSelectedRow == -1)
{
notSelectedDeleteFile();
return;
}
QModelIndex dirModelIndex = ui->dirTreeView->currentIndex();
QString dirPath = dirModel->filePath(dirModelIndex);
fileModelIndex = fileTableViewModel->index(fileTableViewSelectedRow, 0);
QString fileName = fileTableViewModel->data(fileModelIndex).toString();
QString filePath = dirPath + "/" + fileName;
if(filePath.operator ==(currentProgrammerOpenFile))
{
deleteCurrentOpenFile();
}else
{
QFileSystemModel deleteFileModel;
QModelIndex deleteModelIndex = deleteFileModel.index(filePath);
bool isSucceed = deleteFileModel.remove(deleteModelIndex);
if(isSucceed == false)
{
deleteFileFault();
}else
{
deleteFileSucceed();
}
}
QStringList stringList;
stringList.clear();
stringList.append(ui->filterComboBox->currentText());
setSelectFilePath(dirPath, stringList);
}
还有写功能未完成,后续完成,代码相对简单,不做解释。
ui文件
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>customDeleteFileDialog</class>
<widget class="QDialog" name="customDeleteFileDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>450</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QTreeView" name="dirTreeView">
<property name="geometry">
<rect>
<x>9</x>
<y>50</y>
<width>281</width>
<height>291</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="removePushButton">
<property name="geometry">
<rect>
<x>530</x>
<y>398</y>
<width>65</width>
<height>45</height>
</rect>
</property>
<property name="text">
<string>删除</string>
</property>
</widget>
<widget class="QPushButton" name="cancelPushButton">
<property name="geometry">
<rect>
<x>640</x>
<y>398</y>
<width>65</width>
<height>45</height>
</rect>
</property>
<property name="text">
<string>取消</string>
</property>
</widget>
<widget class="QComboBox" name="filterComboBox">
<property name="geometry">
<rect>
<x>621</x>
<y>351</y>
<width>161</width>
<height>27</height>
</rect>
</property>
</widget>
<widget class="QTableView" name="fileTableView">
<property name="geometry">
<rect>
<x>300</x>
<y>50</y>
<width>481</width>
<height>291</height>
</rect>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>