为什么QFileSystemModel在我的Qt应用程序内部不能进行拖放操作?
我有非常简单的代码,显示文件结构:为什么QFileSystemModel在我的Qt应用程序内部不能进行拖放操作?,qt,user-interface,qfilesystemmodel,Qt,User Interface,Qfilesystemmodel,我有非常简单的代码,显示文件结构: class MainWindow : public QMainWindow { Q_OBJECT private: Ui::MainWindow *ui; QFileSystemModel model; QTreeView treeView; }; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWind
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
Ui::MainWindow *ui;
QFileSystemModel model;
QTreeView treeView;
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
model.setRootPath(QDir::rootPath());
ui->treeView->setModel(&model);
ui->treeView>setSelectionMode(QAbstractItemView::SingleSelection);
ui->treeView->setDragEnabled(true);
ui->treeView->viewport()->setAcceptDrops(true);
ui->treeView->setDropIndicatorShown(true);
ui->treeView->setDragDropMode(QAbstractItemView::InternalMove);
ui->treeView->setAcceptDrops(true);
ui->tableView->setModel(&model);
}
我可以选择文件并将其直接拖放到文件夹或桌面上,但当我尝试在内部移动或复制时,它会显示这一点并不重要
在我看来,我已经尝试了所有的选择,我是忘了写点什么还是设置了其他的选择
我已经使用QFileSystemModel作为数据源和
已启用视图的拖放功能,但仍无法看到光标
显示它已准备好进行放置操作。我错过了什么
在浏览类似代码后,根据经验回答您。为了解决接受下降的项目,模型方面需要做更多的工作:
// MyFileSysModel is a child from model class used in your example.
// Mind that specific application drag and drop logic may differ.
// I in fact modified that from QSortFilterProxyModel-type of class
// but that should be similar.
Qt::ItemFlags MyFileSysModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags defaultFlags = QFileSystemModel::flags(index);
if (!index.isValid())
return defaultFlags;
const QFileInfo& fileInfo = this->fileInfo(index);
// The target
if (fileInfo.isDir())
{
// allowed drop
return Qt::ItemIsDropEnabled | defaultFlags;
}
// The source: should be directory (in that case)
else if (fileInfo.isFile())
{
// allowed drag
return Qt::ItemIsDragEnabled | defaultFlags;
}
return defaultFlags;
}
。。。当然,我们现在需要使用派生模型类:
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
Ui::MainWindow *ui;
MyFileSysModel model; // has virtual function member "flags"
QTreeView treeView;
};
我已经使用QFileSystemModel作为数据源和
已启用视图的拖放功能,但仍无法看到光标
显示它已准备好进行放置操作。我错过了什么
在浏览类似代码后,根据经验回答您。为了解决接受下降的项目,模型方面需要做更多的工作:
// MyFileSysModel is a child from model class used in your example.
// Mind that specific application drag and drop logic may differ.
// I in fact modified that from QSortFilterProxyModel-type of class
// but that should be similar.
Qt::ItemFlags MyFileSysModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags defaultFlags = QFileSystemModel::flags(index);
if (!index.isValid())
return defaultFlags;
const QFileInfo& fileInfo = this->fileInfo(index);
// The target
if (fileInfo.isDir())
{
// allowed drop
return Qt::ItemIsDropEnabled | defaultFlags;
}
// The source: should be directory (in that case)
else if (fileInfo.isFile())
{
// allowed drag
return Qt::ItemIsDragEnabled | defaultFlags;
}
return defaultFlags;
}
。。。当然,我们现在需要使用派生模型类:
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
Ui::MainWindow *ui;
MyFileSysModel model; // has virtual function member "flags"
QTreeView treeView;
};