Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么QFileSystemModel在我的Qt应用程序内部不能进行拖放操作?_Qt_User Interface_Qfilesystemmodel - Fatal编程技术网

为什么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;
};