Qt自已创建打开系统对话框

我们可以根据系统的对话框显示内容,我们自己创建一些类似功能的界面,代码相对简单如下:

头文件:

#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>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值