您的位置:首页 > 其它

双击QListWidget中Item重命名,删除

2017-11-01 20:30 363 查看
从文件夹中读取文件,在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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: