双击QListWidget中Item重命名,删除
程序员文章站
2022-03-04 11:55:08
...
从文件夹中读取文件,在QListWidget中按照QComboBox中的后缀名显示不同的文件,并实现对文件的删除,双击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();
}
}
}
上一篇: freemarker自定义标签
下一篇: C#自定义控件之数字文本框