какой класс должен быть адресован для поддержки drag’n drop между приложением Qt и поиском

Я пытаюсь создать приложение, которое перечисляет папки и файлы с устройства Android для поиска и возможности копирования с / на ПК.

Я сделал класс, как показано ниже в моем Browser.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();
}

и класс в browser.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(){};
};

Drag’n drop работает в дереве, я могу перемещать вещи, даже если они не работают должным образом, так как я могу поместить файл в файл и создать дочерний элемент. Под файлом я имею в виду TreeWidgetItem, а не настоящий файл. Это тоже то, что мне нужно добавить, но я не знаю, где.

Но я не понимаю, как обращаться с драндропом. Мне нужно иметь возможность контролировать перетаскивание внутри дерева и снаружи, чтобы скопировать файл с / на мой компьютер.

Кажется, что :

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

Никогда не называются … даже если работает drag’n drop

Любая идея, как обрабатывать события и перегрузки или настроить поведение?

Спасибо

-1

Решение

Класс, который имеет dragEnterEvent и переопределенный материал называется BrowserОднако вы не создаете его, вместо этого вы создаете QTreeWidget:

QTreeWidget *MyTree = new QTreeWidget(centralWidget);

Так вот почему никто из Browser будет вызван. Вы, возможно, хотели написать:

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

Или что-то типа того.

0

Другие решения


По вопросам рекламы [email protected]