Qt-将文件拖放到ListView中
Qt - Drag and Drop File into ListView
我正在尝试编写一个简单的程序(没有什么特别的),它有一个QListView
和一些按钮。
我的问题是:如何具体告诉QListView
接受来自文件系统的拖放?
我目前有
setAcceptDrops(true)
这是可以的,但拖放可以在整个(主)窗口上工作。我只是想让它在文件被拖到QListView
中时工作。
为什么不起作用?:
ui->listView->setAcceptDrops(true);
整个代码:
#include "player.h"
#include "ui_player.h"
#include <QListView>
Player::Player(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Player)
{
ui->setupUi(this);
setAcceptDrops(true);
//This doesnt work:
//ui->listView->setAcceptDrops(true);
}
Player::~Player()
{
delete ui;
}
void Player::dropEvent(QDropEvent *ev)
{
QList<QUrl> urls = ev -> mimeData() -> urls();
foreach(QUrl url, urls)
{
qDebug() << url.toString();
}
ev->acceptProposedAction();
}
void Player::dragEnterEvent(QDragEnterEvent *ev)
{
ev->acceptProposedAction();
}
您应该为QListView
而不是QMainWindow
重写这些事件函数。当您执行ui->listView->setAcceptDrops(true);
时,QListView
现在是通过调用其virtual
、dropEvent
和dragEnterEvent
函数来对丢弃事件作出反应的小部件。
创建自己的类,继承QListView
并在其中定义dropEvent
和dragEnterEvent
:
class MyListView
{
public:
MyListView(QWidget *parent); // implement
protected:
void dropEvent(QDropEvent *ev) override; // implement
void dragEnterEvent(QDragEnterEvent *ev) override; // implement
};
您可能还想覆盖dragMoveEvent
,如参考所述。
相关文章:
- 在组合框中拖放项目
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- 拖放我的MDI被CRichEditView拦截并在CRichEditView::GetDocument中崩溃 - 如何覆
- 在特定区域拖放 | Qt
- Qt - 在QGraphicScene中拖放时如何从项目中获取文本?
- Qt 模型拖放 - 无法保存类型 QJsonValue
- 如何在 2 个应用程序之间实现拖放?
- 在拖放 QML 列表中插入/删除项目使用 cpp 模型查看
- UI具有拖放功能
- 如何使用拖放功能和点击信号函数QT创建标签
- 使用MFC在对话框上拖放文件
- QListWidget通过setItemWidget使用自定义小部件集进行拖放
- 将拖放连接到QListWidget中的函数的最佳方法
- QTextEdit-根据QCursor位置进行条件拖放
- 如果使用Qt::DecorationRole,则在拖放时崩溃
- 用代码模拟窗口拖放
- Ole 拖放故障排除
- 基于文本的角色扮演游戏拖放和保留物品功能
- 拖放C++在拖放之前操作 Outlook 文件
- 如何在QML无窗口应用程序中设置拖放区域