[PyQt4] Drag and drop rows with QTableView and QSqlTableModel
Hi I am trying to drag and drop single rows internally by clicking on any item in the row. I can't seem to get this to work. I can make them sortable by making the HEADERS movable, but then I must click on the header to initiate the drag which is not desirable. Here is a working example:
Code:
import os, sys
from PyQt4 import QtCore, QtGui, QtSql
def makeDB():
import sqlite3
db = sqlite3.connect("db.db")
db.execute("create table if not exists table1 (value text, data text)")
query = "insert into table1 (value, data) values (?, ?)"
valueSet = (("day","today"),("time","noon"),("food","cheese"))
for values in valueSet:
db.execute(query, values)
db.commit()
def __init__(self, model, parent = None):
super(TestApp, self).__init__(parent)
self.model = model
table.setModel(self.model)
table.setSortingEnabled(True)
table.setDropIndicatorShown(True)
table.setAcceptDrops(True)
table.setDragEnabled(True)
table.
setSelectionMode(QtGui.
QTableView.
SingleSelection) table.
setSelectionBehavior(QtGui.
QTableView.
SelectRows) '''table.horizontalHeader().setMovable(True)
table.horizontalHeader().setDragEnabled(True)
table.horizontalHeader().setDragDropMode(QtGui.QAbstractItemView.InternalMove)
table.verticalHeader().setMovable(True)
table.verticalHeader().setDragEnabled(True)
table.verticalHeader().setDragDropMode(QtGui.QAbstractItemView.InternalMove)
'''
layout.addWidget(table)
def __init__(self, parent = None):
super(myModel, self).__init__(parent)
self.setTable("table1")
self.select()
if __name__ == "__main__":
if not os.path.exists("db.db"):
makeDB()
myDb.setDatabaseName("db.db")
model = myModel()
dl = TestApp(model)
dl.exec_()
Re: [PyQt4] Drag and drop rows with QTableView and QSqlTableModel
Adding the follow to the model subclass allows the drag to start, but I cannot drop them:
Code:
def flags(self, index):
return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsDropEnabled