如果在TreeView Qt中按下按钮,则重命名文件

时间:2013-12-04 21:04:46

标签: c++ qt file treeview

我有一个树视图,显示包含文本文件的文件夹。有一个“打开”按钮。那会打开文件。但是当按下此按钮时,它应该将文件重命名为: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()

感谢您的帮助!

2 个答案:

答案 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();
}