需要解决哪个类以支持Qt应用程序和查找器之间的拖放

which class need to be addressed to support drag'n drop between Qt app and finder

本文关键字:查找 应用程序 之间 拖放 Qt 支持 解决      更新时间:2023-10-16

我正在尝试构建一个应用程序,该应用程序列出了从Android设备到查找器的文件夹和文件,并能够从/复制到PC。

我已经在我的浏览器中完成了如下课程.cpp

Browser::Browser(USBDevice dev, QWidget *parent) :
     QTreeWidget(parent)
{
    USBDevice MyDevice;
    MyDevice = dev;
    QMainWindow *window = new QMainWindow();
    window->setWindowTitle(QString::fromUtf8("PULS"));
    window->resize(600, 600);
    // window->setDragEnabled(true);
    //   window->setAcceptDrops(true);
    //   window->setMouseTracking(true);

    QWidget *centralWidget = new QWidget(window);
    QPushButton* CreateFolderButton = new QPushButton("Create Folder", centralWidget);
    CreateFolderButton->setFixedSize(100,20);
    //QVBoxLayout* Layout = new QVBoxLayout(centralWidget);
    //Layout->addWidget(CreateFolderButton);
    QPushButton* DeleteButton = new QPushButton("Delete", centralWidget);
    DeleteButton->setFixedSize(100,20);
    QVBoxLayout* Layout = new QVBoxLayout(centralWidget);
    Layout->addWidget(CreateFolderButton);
    Layout->addWidget(DeleteButton);
    QTreeWidget *MyTree = new QTreeWidget(centralWidget);
    Layout->addWidget(MyTree);
    MyTree->setSortingEnabled(true);
    MyTree->setColumnWidth(0, 400);
    MyTree->setDragDropMode(DragDrop);
    MyTree->setDropIndicatorShown(true);
    MyTree->setDragEnabled(true);
    MyTree->setMouseTracking(true);
    QTreeWidgetItem* headerItem = new QTreeWidgetItem();
    headerItem->setText(0,QString("File Name"));
    headerItem->setText(1,QString("Size (Bytes)"));
    headerItem->setText(2,QString("Date"));
    MyTree->setHeaderItem(headerItem);
    Recursive_Parse(MyTree, MyDevice.device_id, MyDevice.device_id->storage, 0, 0, 0);
    window->setCentralWidget(centralWidget);
    MyButtonGroup* group = new MyButtonGroup(MyTree, MyDevice, MyDevice.device_id, MyDevice.device_id->storage, centralWidget);
    group->addButton(CreateFolderButton);
    group->addButton(DeleteButton);
    window->show();
}

和浏览器.h 中的类作为

class Browser : public QTreeWidget
{
    Q_OBJECT
    public:
        Browser(USBDevice dev, QWidget* parent = 0);    
        void dragEnterEvent(QDragEnterEvent *event);
        void dropEvent(QDropEvent *event);
        void dragMoveEvent(QDragMoveEvent *event);
        void dragLeaveEvent(QDragLeaveEvent *event);
        ~Browser(){};
};

拖放在树中工作,即使它不能正常工作,我也可以移动东西,因为我可以将文件放在文件上并创建一个子文件。通过文件,我只是指TreeWidgetItemItem而不是真正的文件。这也是我需要补充的东西,但我不知道在哪里。

但我看不出如何处理dran'ndrop。我需要能够控制树内和树外的拖放,以便从/向我的计算机复制文件。

看来:

        void dragEnterEvent(QDragEnterEvent *event);
        void dropEvent(QDropEvent *event);
        void dragMoveEvent(QDragMoveEvent *event);
        void dragLeaveEvent(QDragLeaveEvent *event);

从不叫...即使拖放有效

知道如何处理事件和过载或自定义行为吗?

谢谢

被覆盖dragEnterEvent和东西的类被命名为 Browser ,但是您不实例化它,而是实例化QTreeWidget

QTreeWidget *MyTree = new QTreeWidget(centralWidget);
所以这就是为什么没有

来自Browser的成员会被召唤的原因。你可能想写:

QTreeWidget *MyTree = new Browser(MyDevice, centralWidget);

或类似的东西。