Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2010 17:07:52

villager
От:
Зарегистрирован: 2008-11-04
Сообщения: 111
Репутация: +  0  -
Профиль   Отправить e-mail  

QTableWidget+Drag-and-drop

как из dropEvent узнать, на какой ячейке QTableWidget оно произошло?
itemAt возвращает None :(
что тут не так?

from PyQt4.QtGui import *
import sys

app = QApplication(sys.argv)
tbl = QTableWidget( 5, 5)

tbl.dragEnabled()
tbl.setDragDropMode(QAbstractItemView.DragDrop)
tbl.setDropIndicatorShown(True)

def myDropEvent(event):
event.acceptProposedAction()
print tbl, event.pos(), tbl.itemAt(event.pos())
tbl.dropEvent=myDropEvent

tbl.show()
app.exec_()



Офлайн

#2 Авг. 6, 2010 19:52:23

Gifts
От:
Зарегистрирован: 2010-08-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

QTableWidget+Drag-and-drop

villager

from PyQt4.QtGui import *
import sys

app = QApplication(sys.argv)
tbl = QTableWidget( 5, 5)

tbl.dragEnabled()
tbl.setDragDropMode(QAbstractItemView.DragDrop)
tbl.setDropIndicatorShown(True)

def dropMimeData(row, column, data, action):
print row, column, data, action
return True

tbl.dropMimeData = dropMimeData
tbl.show()
app.exec_()



Офлайн

#3 Авг. 6, 2010 20:27:12

villager
От:
Зарегистрирован: 2008-11-04
Сообщения: 111
Репутация: +  0  -
Профиль   Отправить e-mail  

QTableWidget+Drag-and-drop

спасибо!
все так просто
mimeData готовлю данные, а про dropMimeData думал, но не попробовал :)



Офлайн

#4 Авг. 6, 2010 23:44:45

villager
От:
Зарегистрирован: 2008-11-04
Сообщения: 111
Репутация: +  0  -
Профиль   Отправить e-mail  

QTableWidget+Drag-and-drop

еще попрактиковался (режими копировать/переместить):

from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys

app = QApplication(sys.argv)
tbl = QTableWidget( 5, 5)

tbl.dragEnabled()
tbl.setDragDropMode(QAbstractItemView.DragDrop)
tbl.setDropIndicatorShown(True)

def mimeData(ar):
if tbl.currentItem()<>None:
md=QMimeData()
md.setData("myMime", "%s" % tbl.currentItem().text())
return md
tbl.mimeData=mimeData

def dropMimeData(row, column, data, action):
print "dropMime", data.data('myMime'), tbl.dropSource, tbl.dropMode
return True
tbl.dropMimeData = dropMimeData

def dragEnterEvent(event):
tbl.dropSource=event.source()
if event.format()=="myMime":
event.acceptProposedAction()
if not event.keyboardModifiers()==Qt.ControlModifier:
event.setDropAction(Qt.MoveAction)
else:
event.setDropAction(Qt.CopyAction)
tbl.dragEnterEvent=dragEnterEvent

def dragMoveEvent(event):
dragEnterEvent(event)
tbl.dragMoveEvent=dragMoveEvent

def dropEvent(event):
print "drop"
if event.dropAction()==Qt.MoveAction:
event.setDropAction(Qt.CopyAction)
tbl.dropMode="move"
QTableWidget.dropEvent(tbl, event)
else:
tbl.dropMode="copy"
QTableWidget.dropEvent(tbl, event)
event.accept()

tbl.dropEvent=dropEvent

tbl.setItem(0, 0, QTableWidgetItem(u"ggg"))
tbl.show()
app.exec_()
почему-то не вызвался dropMimeData для режима перемещения, поэтому пришлось в dropEvent извращаться
да и вот это как то мне не нравиться (но работает :) ):
tbl.dropSource=event.source()



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version