0.2°250 2024-07-11 21:54 采纳率: 0%
浏览 8

怎么实现将QT控件拖到桌面或本地其他位置并获取其位置

有什么办法可以让我的treewidget的item拖到本地并获取其路径吗?找了很多资料都没看见可行的办法 求赐教

  • 写回答

3条回答 默认 最新

  • 关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    要实现将Qt控件拖到桌面或本地其他位置并获取其位置,您可以使用QDragDrop和QGraphicsScene。以下是完成此任务的基本步骤:

    1. 首先,确保您的应用程序已包含必要的库:dragdrop, qgraphicssceneQGraphicsScene::Item. 如果您尚未安装这些库,可以使用以下命令进行安装:
    pip install dragdrop qgraphicsscene qgraphicsscene-item
    
    1. 创建一个简单布局以显示您的Qt控件,并添加需要的位置。
    2. 使用QDragDrop接口传递您的布局和控件,并接收被拖动控件的位置。
    3. 一旦鼠标悬停在QDragDrop上,弹出一个对话框允许用户选择被拖动控件的来源(例如文件系统、USB设备等)。
    4. 当用户选择源后,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。如果您的应用程序不支持这个功能,可能需要查找其他方法来实现拖放。此外,您还需要确保您的计算机上已经安装了所需的库和依赖项。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月11日

悬赏问题

  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 拓扑学,凸集,紧集。。
  • ¥15 如何扩大AIS数据容量
  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 keil官网下载psn序列号在哪