我有一个树视图,显示包含文本文件的文件夹。有一个“打开”按钮。那会打开文件。但是当按下此按钮时,它应该将文件重命名为:read filename.txt
。因此,如果存在名为nameslist.txt
的文件且按下按钮,则应将其重命名为read nameslist.txt
或类似名称。我想到了这样的事情:
void berichtenhistorie::on_Openbutton_released()
{
QModelIndex index = ui->treeView->currentIndex();
QString name = index.fileName();
QString path = index.filePath();
QFile file(path);
file.open(QIODevice::WriteOnly | QIODevice::Text);
file.rename("read " + name);
file.close();
}
但这不起作用。我得到以下错误:
error: C2352: 'QDirModel::fileName' : illegal call of non-static member function
但我不知道如何正确使用fileName()
和filePath()
。
感谢您的帮助!
答案 0 :(得分:2)
我认为这就是你要找的东西:
void berichtenhistorie::on_Openbutton_released()
{
QModelIndex index = ui->treeView->currentIndex();
QFileSystemModel *model = (QFileSystemModel*)ui->treeView->model();
QString path = model->filePath(index);
QString name = model->fileName(index);
QString dir = path;
dir.remove(dir.size() - name.size(), name.size());
QFile file(path);
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
{
//Interact with the file
file.close();
if(file.rename(QString("%1read %2").arg(dir, name)))
qDebug() << "Renamed";
}
}
答案 1 :(得分:1)
以下是您使用QFile时需要完成的每个步骤的突破。
QFile file("test.txt");
if(file.exists())
{
qDebug() << "found file";
if(file.open(QIODevice::ReadWrite))
{
qDebug() << "opened";
if(file.rename("text1.txt"))
{
qDebug() << "renamed";
}
else
{
qDebug() << "failed to rename";
}
file.close();
}
}
else
{
qDebug() << "file does not exist";
}
最后,您只需要通过调试器逐步完成,而不是打印出应用程序已知的所有内容。 E.g。
QFile file("test.txt");
if(file.exists() && file.open(QIODevice::ReadWrite))
{
if(file.rename("text1.txt"))
{
qDebug() << "renamed";
}
file.close();
}