0

我正在制作一个简单的文件资源管理器,但遇到了 Qt 的一些问题。我想向用户显示他计算机上文件的树形视图,但我也希望能够选择多个文件/目录并稍后对它们执行某些操作(通过使用+或+进行选择checkboxes或多项选择)。我已经放置了元素并为其设置了模型()。它给了我一个很好的树视图,但我不能修改标题(列名)或在每一行中添加我自己的列(例如)。Qt 对我来说是新的,我已经搜索了几个小时来寻找一些技巧/解决方案,但没有任何东西可以使用ctrlleft clickshiftleft clickQTreeViewQFileSystemModelcheckboxQFileSystemModel. 我能做些什么来让它工作吗?

代码简短而简单:

QString lPath = "C:/";
QString rPath = "C:/";
leftTree_model = new QFileSystemModel(this);
rightTree_model = new QFileSystemModel(this);

leftTree_model->setRootPath(lPath);
rightTree_model->setRootPath(rPath);

//i have actually 2 tree views that work the same
ui->leftTree->setModel(leftTree_model); //ui->leftTree is the first tree view
ui->rightTree->setModel(rightTree_model); //the second
4

1 回答 1

1

使用以下内容:

CheckStateRole为您的模型添加复选框。为此,您从 继承您的自定义项目模型(您将使用该模型)QFileSystemModel,并重新实现该data()方法,您在其中返回bool的值CheckStateRole。您还需要QAbstractItemModel::setData处理更改的方法。您还可以查看QAbstractItemModel 的文档以了解如何更改标题文本 ( headerData())

更改视图的选择模式以允许多选

编辑:这是从模型继承的示例代码

  class MyFancyModel : public QFileSystemModel
  {
  public:
    MyFancyModel(QObject* pParent = NULL) : QFileSystemModel(pParent)
    {
    }

    QVariant data(const QModelIndex & index, int role = Qt::DisplayRole ) const
    {
      if (role == Qt::CheckStateRole)
      {
        // stub value is true
        return true;  // here you will return real values 
                      // depending on which item is currently checked
      }
      return QFileSystemModel::data(index, role);
    }
  };
于 2013-05-03T08:41:49.803 回答