Убил день на поиск драгдропа из QTableView
нашел!
ключевое слово: model.flags
#!/usr/bin/env python import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtSql import * def createConnection(): db = QSqlDatabase.addDatabase("QSQLITE") db.setDatabaseName(":memory:") if not db.open(): QMessageBox.critical(0, qApp.tr("Cannot open database"), qApp.tr("Unable to establish a database connection.\n" "This example needs SQLite support. Please read " "the Qt SQL driver documentation for information " "how to build it.\n\nClick Cancel to exit."), QMessageBox.Cancle, QMessageBox.NoButton) return False query = QSqlQuery() query.exec_("create table person(id int primary key, " "firstname varchar(20), lastname varchar(20))") query.exec_("insert into person values(101, 'Danny', 'Young')") query.exec_("insert into person values(102, 'Christine', 'Holand')") query.exec_("insert into person values(103, 'Lars', 'Gordon')") query.exec_("insert into person values(104, 'Roberto', 'Robitaille')") query.exec_("insert into person values(105, 'Maria', 'Papadopoulos')") query.exec_("insert into person values(106, 'Ma', 'Papa')") return True def createView( title, model ): return view class Window(QWidget): def __init__(self, parent = None): QWidget.__init__(self, parent) model = QSqlTableModel(self) model.setTable("person") model.setEditStrategy(QSqlTableModel.OnManualSubmit) model.select() model.setSupportedDragActions(Qt.ActionMask) #!!!!!!!!!!!!!! def setFlags(index): return Qt.ItemIsDragEnabled|Qt.ItemIsDropEnabled|Qt.ItemIsSelectable|Qt.ItemIsEnabled model.flags=setFlags #!!!!!!!!!!!!!! model.setHeaderData(0, Qt.Horizontal, QVariant(QObject.tr(model, "ID"))) model.setHeaderData(1, Qt.Horizontal, QVariant(QObject.tr(model, "First name"))) model.setHeaderData(2, Qt.Horizontal, QVariant(QObject.tr(model, "Last name"))) view1 = QTableView(self) view1.setModel(model) view1.setViewportMargins (-100, -100, -100, -100) view1.verticalScrollBar().hide() view1.horizontalScrollBar().hide() view1.setSelectionBehavior(QAbstractItemView.SelectRows) view1.setContextMenuPolicy(Qt.ActionsContextMenu) def delrow(): view1.model().removeRow(view1.currentIndex().row()) view1.model().submitAll() a=QAction("delete", view1) a.triggered.connect(delrow) view1.addAction(a) def listtbl(): c=QSqlQuery("select * from person") c.last() print "Total number records: ", c.at()+1 b=QAction("check", view1) b.triggered.connect(listtbl) view1.addAction(b) view2 = QTableView(self) view2.setModel(model) view2.setSelectionBehavior(QAbstractItemView.SelectRows) view1.selectRow(0) view2.selectRow(0) layout = QHBoxLayout() layout.addWidget(view1) layout.addWidget(view2) frame=QGroupBox("123--------------------------") layout.addWidget(frame) #!!!!!!!!!!!!!! view2.setDragEnabled(True) frame.setAcceptDrops (True) #!!!!!!!!!!!!!! self.setLayout(layout) layout.setMargin( 1) layout.setSpacing(0) ############################################ def selectionChanged1(): view2.selectRow(selectionModel1.currentIndex().row()) def selectionChanged2(): view1.selectRow(selectionModel2.currentIndex().row()) selectionModel1 = QItemSelectionModel(model, view1) view1.setSelectionModel(selectionModel1) self.connect(selectionModel1, SIGNAL("currentChanged(const QModelIndex &, const QModelIndex &)"),selectionChanged1) selectionModel2 = QItemSelectionModel(model, view2) view2.setSelectionModel(selectionModel2) self.connect(selectionModel2, SIGNAL("currentChanged(const QModelIndex &, const QModelIndex &)"),selectionChanged2) view2.connect(view1.verticalScrollBar(), SIGNAL("valueChanged(int)"),view2.verticalScrollBar(), SLOT("setValue(int)")) view2.connect(view2.verticalScrollBar(), SIGNAL("valueChanged(int)"),view1.verticalScrollBar(), SLOT("setValue(int)")) ############################################ if __name__ == "__main__": app = QApplication(sys.argv) if not createConnection(): sys.exit(1) window = Window() window.show() sys.exit(app.exec_())