OSDN Git Service

ドロップ処理のテスト
authorMasayuki Satoh <miyabi.satoh@gmail.com>
Thu, 21 Aug 2014 21:43:30 +0000 (06:43 +0900)
committerMasayuki Satoh <miyabi.satoh@gmail.com>
Thu, 21 Aug 2014 21:43:30 +0000 (06:43 +0900)
filetablemodel.cpp
filetablemodel.h
filetableview.cpp
filetableview.h
folderpanel.cpp

index 4dadfed..0143924 100644 (file)
@@ -6,6 +6,9 @@
 #include <QApplication>\r
 #include <QSettings>\r
 #include <QMenuBar>\r
+#include <QMimeData>\r
+#include <QUrl>\r
+#include <QMessageBox>\r
 #ifdef Q_OS_WIN32\r
     #include <windows.h>\r
 #endif\r
@@ -341,9 +344,16 @@ QVariant FileTableModel::headerData(int section, Qt::Orientation orientation, in
 Qt::ItemFlags FileTableModel::flags(const QModelIndex &index) const\r
 {\r
     Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;\r
-    if (index.column() == 0 && m_fileInfoList[index.row()].fileName() != "..")\r
-    {\r
-        flags |= Qt::ItemIsUserCheckable;\r
+    if (!index.isValid()) {\r
+        flags |= Qt::ItemIsDropEnabled;\r
+    }\r
+    else if (m_fileInfoList[index.row()].fileName() != "..") {\r
+        if (index.column() == 0) {\r
+            flags |= Qt::ItemIsUserCheckable;\r
+        }\r
+//        TODO\r
+//        flags |= Qt::ItemIsDragEnabled;\r
+        flags |= Qt::ItemIsDropEnabled;\r
     }\r
     return flags;\r
 }\r
@@ -367,3 +377,43 @@ bool FileTableModel::setData(const QModelIndex &index, const QVariant &value, in
 \r
     return false;\r
 }\r
+\r
+Qt::DropActions FileTableModel::supportedDropActions() const\r
+{\r
+    return Qt::CopyAction | Qt::MoveAction;\r
+}\r
+\r
+QStringList FileTableModel::mimeTypes() const\r
+{\r
+    QStringList types;\r
+\r
+    types << "text/uri-list";\r
+\r
+    return types;\r
+}\r
+\r
+bool FileTableModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)\r
+{\r
+    Q_UNUSED(parent);\r
+\r
+    qDebug() << action << row << column;\r
+\r
+    if (action == Qt::IgnoreAction)\r
+        return true;\r
+\r
+    if (!data->hasFormat("text/uri-list"))\r
+        return false;\r
+\r
+    if (column > 0)\r
+        return false;\r
+\r
+    QString msg;\r
+    msg = "ドロップを検知しました。<br/>";\r
+    foreach (const QUrl &url, data->urls()) {\r
+        msg += url.toLocalFile() + "<br/>";\r
+        qDebug() << url.toLocalFile();\r
+    }\r
+    QMessageBox::information(NULL, "info", msg);\r
+\r
+    return true;\r
+}\r
index 3eb04a5..8ef11c3 100644 (file)
@@ -67,6 +67,11 @@ public:
     QVariant headerData(int section, Qt::Orientation orientation, int role) const;\r
     Qt::ItemFlags flags(const QModelIndex &index) const;\r
     bool setData(const QModelIndex &index, const QVariant &value, int role);\r
+    Qt::DropActions supportedDropActions() const;\r
+    QStringList mimeTypes() const;\r
+    bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);\r
 };\r
 \r
+\r
+\r
 #endif // FILETABLEMODEL_H\r
index 10ac2be..4acb56b 100644 (file)
@@ -82,6 +82,12 @@ FileTableView::FileTableView(QWidget *parent) :
 \r
     connect(this, SIGNAL(doubleClicked(QModelIndex)),\r
             this, SLOT(setRootIndex(QModelIndex)));\r
+\r
+    // Drag & Drop\r
+    setDragEnabled(true);\r
+    setAcceptDrops(true);\r
+    setDropIndicatorShown(true);\r
+//    setDragDropMode(QAbstractItemView::DragDrop);\r
 }\r
 \r
 FileTableView::~FileTableView()\r
@@ -815,3 +821,16 @@ void FileTableView::currentChanged(const QModelIndex &current, const QModelIndex
 \r
     QTableView::currentChanged(current, previous);\r
 }\r
+\r
+\r
+//void FileTableView::dropEvent(QDropEvent *event)\r
+//{\r
+//    foreach (const QString &str, event->mimeData()->formats()) {\r
+//        qDebug() << str;\r
+//    }\r
+//}\r
+\r
+//void FileTableView::dragEnterEvent(QDragEnterEvent *event)\r
+//{\r
+//    event->acceptProposedAction();\r
+//}\r
index 0068e4f..2a94975 100644 (file)
@@ -83,6 +83,8 @@ public slots:
 protected:\r
     void keyPressEvent(QKeyEvent *event);\r
     void focusInEvent(QFocusEvent *event);\r
+//    void dropEvent(QDropEvent *event);\r
+//    void dragEnterEvent(QDragEnterEvent *event);\r
 \r
     // QAbstractItemView interface\r
 protected slots:\r
index f9c3e7b..b0019b4 100644 (file)
@@ -42,7 +42,7 @@ FolderPanel::FolderPanel(QWidget *parent) :
     header->setSectionResizeMode(2, QHeaderView::ResizeToContents);\r
     header->setSectionResizeMode(3, QHeaderView::ResizeToContents);\r
     header->setDefaultSectionSize(header->minimumSectionSize());\r
-\r
+    // 行の高さを75%に調整\r
     QHeaderView *vHeader = ui->fileTable->verticalHeader();\r
     vHeader->setDefaultSectionSize(vHeader->defaultSectionSize() * 0.75);\r
 }\r