有什么办法可以让我的treewidget的item拖到本地并获取其路径吗?找了很多资料都没看见可行的办法 求赐教
3条回答 默认 最新
檀越@新空间 2024-07-11 21:56关注晚上好🌙🌙🌙
本答案参考ChatGPT-3.5要实现将Qt控件拖到桌面或本地其他位置并获取其位置,您可以使用QDragDrop和QGraphicsScene。以下是完成此任务的基本步骤:
- 首先,确保您的应用程序已包含必要的库:
dragdrop,qgraphicsscene和QGraphicsScene::Item. 如果您尚未安装这些库,可以使用以下命令进行安装:
pip install dragdrop qgraphicsscene qgraphicsscene-item- 创建一个简单布局以显示您的Qt控件,并添加需要的位置。
- 使用QDragDrop接口传递您的布局和控件,并接收被拖动控件的位置。
- 一旦鼠标悬停在QDragDrop上,弹出一个对话框允许用户选择被拖动控件的来源(例如文件系统、USB设备等)。
- 当用户选择源后,QGraphicsScene将保存当前拖动控件的路径并将其加载到图层中。
下面是完整的代码示例:
#include <QDragDrop> #include <QGraphicsScene> class MyScene : public QGraphicsScene { public: MyScene(QGraphicsScene *parent = nullptr) : QGraphicsScene(parent) {} void addItem(QGraphicsScene::Item *item) override { 郑码 40276; addItem(item); } void dragEnterEvent(QDragEnterEvent *event) override { 郑码 40276; event->setIgnoreRole(QDrag::None); } void dragMoveEvent(QDragMoveEvent *event) override { 郑码 40276; event->setIgnoreRole(QDrag::None); } void dragLeaveEvent(QDrag LeaveEvent *event) override { 郑码 40276; event->setIgnoreRole(QDrag::None); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MyScene scene(&app); scene.addItem(new QWidget()); QDragDrop drop drop; drop.setDragEnabled(true); QObject::connect(drop, &QDragDrop::dragEnterEvent, &drop, this, &MyScene::dragEnterEvent); QObject::connect(drop, &QDragDrop::dragMoveEvent, &drop, this, &MyScene::dragMoveEvent); QObject::connect(drop, &QDragDrop::dragLeaveEvent, &drop, this, &MyScene::dragLeaveEvent); return app.exec(); }在这个示例中,我们创建了一个简单的场景,并在其子组件中添加了一个带有标题的消息框。然后,我们使用QDragDrop API来连接控件的dragenter、dragmove和dragleave事件处理程序。最后,我们监听这三个事件,并根据需求调整默认行为。
请注意,这段代码假设您的Qt应用程序支持QDragDrop。如果您的应用程序不支持这个功能,可能需要查找其他方法来实现拖放。此外,您还需要确保您的计算机上已经安装了所需的库和依赖项。
解决 无用评论 打赏 举报- 首先,确保您的应用程序已包含必要的库: