欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

双击QListWidget中Item重命名,删除

程序员文章站 2022-03-04 11:55:08
...

从文件夹中读取文件,在QListWidget中按照QComboBox中的后缀名显示不同的文件,并实现对文件的删除,双击QListWidget中的Item进行重命名操作。

双击QListWidget中Item重命名,删除
首先控件就直接使用拖拽的方式进行布局。
然后点击按钮Browse,(自己设定),实现读取文件夹:
m_BrowsePath定义的成员变量,存储文件路径,方便之后进行操作。

    m_BrowsePath= QFileDialog::getExistingDirectory(this, tr("Open file"), tr(""));
    if (m_BrowsePath.length() == 0)
    {
        QMessageBox::information(NULL, tr("Path"), tr("You didin't select any files"));
    }
    else
    {
        ui.lineEdit->setText(m_BrowsePath);
        ShowList();
    }

其中的ShowList()代码如下:

void QFileManagement::ShowList()
{
    if (m_BrowsePath.size() == 0)
    {
        return;
    }
    QStringList filter;
    QDir *dir = new QDir(m_BrowsePath);
    switch (ui.comboBox->currentIndex())
    {
    case all:
        filter << "*.jpg" << "*.png" << "*.mp3" << "*.wmv";
        break;
    case jpg:
    case png:
    case mp3:
    case wmv:
        filter << QString("*%0").arg(ui.comboBox->currentText());
        break;
    default:
        break;
    }
    dir->setNameFilters(filter);
    ui.listWidgetFileName->clear();//显示文件的ListWidget
    QStringList list = dir->entryList();
    ui.listWidgetFileName->addItems(list);
    delete dir;
}

然后每次修改Combobox的时候,都调用一个ShowList就可以了。

至此,已经实现了文件夹中的文件都根据自己所需的后缀名显示在ListWidget中了。
下一步要实现双击某一个Item的时候,设置它为可编辑状态,并修改名称。
首先实现双击,设置为可编辑状态:
绑定信号和槽

    connect(ui.listWidgetFileName, SIGNAL(itemDoubleClicked(QListWidgetItem* )), this, SLOT(OnListWidgetDoubleClicked(QListWidgetItem *)));

实现函数

void OnListWidgetDoubleClicked(QListWidgetItem *item)
{
    item->setFlags(item->flags() | Qt::ItemIsEditable);
    m_RenameIndex = ui.listWidgetFileName->currentRow();//用来保存需要修改名称的index
}

设置成可编辑状态,输入想要保存的文件名,OK。好的,需要重命名了。
但是因为重命名使用的是下面这个,需要知道重命名前后的名称,所以要保存之前的名字。

QFile::rename(m_PrevName, m_CurrentName);

编辑完之后,调用槽函数来实现重命名,可能命名完就用鼠标点击其他地方,所以用下面这个信号和槽

connect(ui.listWidgetFileName, SIGNAL(currentRowChanged(int)), this, SLOT(OnListWidgetCurrentListChanged(int)));

void OnListWidgetCurrentListChanged(int index)
{
    if (!m_bIsRename)
    {
        return;
    }
    else
    {
        m_bIsRename = false;
        QString fileName = m_BrowsePath + "\\" +ui.listWidgetFileName->item(m_RenameIndex)->text();
        bool ok = QFile::rename(m_PrevName, fileName);
        if (!ok)
        {
            QMessageBox::information(NULL, tr("Error"), tr("Rename Failed"));
            return;
        }
    }
}

至此,文件双击Item重命名功能,就实现了。

删除功能就比较简单了。

void QFileManagement::OnpushButtonDelete()
{
    QString deleteFile = ui.listWidgetFileName->item(ui.listWidgetFileName->currentRow())->text();
    QMessageBox::StandardButton rb;
    rb = QMessageBox::question(NULL, tr("Prompt"), tr("Are you sure to Delete the File?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    if (rb == QMessageBox::Yes)
    {
        if (!QFile::remove(m_BrowsePath+"\\"+deleteFile))
        {
            ShowMessageBoxInfo("Delete File Failed");
        }
        else
        {
            ShowList();
        }
    }
}
相关标签: 控件