2014-11-25 8 views
-1

Я пытаюсь создать приложение, в котором перечислены папки и файлы с устройства Android для поиска и возможность копирования с/на ПК.Какой класс должен быть адресован для поддержки drag'n drop между Qt app и finder

Я сделал класс, как показано ниже в моем 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 капли работает в дереве я могу двигаться даже если он не работает должным образом, так как я могу удалить файл в файл и создать дочерний элемент. По файлу я имею в виду TreeWidgetItem не настоящий файл. Это тоже то, что мне нужно добавить, но я не знаю, где.

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

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

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

никогда не называются ... даже если падение Drag'n работает

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

Благодаря

+0

почему a -1 ??? Я удалил свой предыдущий пост с похожим вопросом, но с меньшими деталями 6сек после этого сообщения – Seb

ответ

0

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

QTreeWidget *MyTree = new QTreeWidget(centralWidget); 

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

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

Или что-то в этом роде.

+0

Как это сделать? Извините, что я новичок – Seb

+0

Браузер - это в основном класс, который разрабатывает общее приложение: кнопку, дерево ... и TreeWidget, используемый для отображения данных. – Seb

+0

Ваша жалоба заключалась в том, что функции-члены браузера не вызываются. Действительно, это не когда вы перетаскиваете что-то еще. Если браузер полностью предназначен для чего-то другого, тогда выведите другой класс MyTreeWidget из QTreeWidget, переопределите dragEnterEvent и все это и создайте его. –