Как сделать так чтобы при выборе объекта в QListView создавался такой объект
Я хотел сделать что-то на подобии Qt Designer, но не могу сделать это.
Мне нужно чтобы объект перетаскивался.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не совсем понял что и куда вы собираетесь перетаскивать, но небольшой пример вам покажу. Пожалуйста всегда публикуйте минимально-воспроизводимый пример, который демонстрирует проблему и лучше рассказывайте что вы хотите сделать.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class LListView(QtWidgets.QListView):
def __init__(self, parent=None):
super(LListView, self).__init__(parent)
self.m_model = QtGui.QStandardItemModel(self)
self.setModel(self.m_model)
self.setAcceptDrops(False)
self.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.setResizeMode(QtWidgets.QListView.Adjust)
self.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly)
class RListView(QtWidgets.QListView):
def __init__(self, parent=None):
super(RListView, self).__init__(parent)
self.m_model = QtGui.QStandardItemModel(self)
self.setModel(self.m_model)
self.setAcceptDrops(True)
self.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.setIconSize(QtCore.QSize(50, 50))
self.setResizeMode(QtWidgets.QListView.Adjust)
self.setDragDropMode(QtWidgets.QAbstractItemView.DropOnly)
def dropEvent(self, event):
last_row_count = self.model().rowCount()
super(RListView, self).dropEvent(event)
if self.model().rowCount() > last_row_count:
md = event.mimeData()
fmt = "application/x-qabstractitemmodeldatalist"
if md.hasFormat(fmt):
encoded = md.data(fmt)
stream = QtCore.QDataStream(encoded, QtCore.QIODevice.ReadOnly)
datas = []
item = {}
while not stream.atEnd():
row = stream.readInt32()
column = stream.readInt32()
map_items = stream.readInt32()
for i in range(map_items):
key = stream.readInt32()
value = QtCore.QVariant()
stream >> value
item[QtCore.Qt.ItemDataRole(key)] = value
datas.append(item)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralWidget)
self.l_view = LListView()
self.r_view = RListView()
lay = QtWidgets.QHBoxLayout(self.centralWidget)
lay.addWidget(self.l_view)
lay.addWidget(self.r_view)
for i in range(5):
item = QListWidgetItem()
it = QtGui.QStandardItem("item"+str(i))
self.l_view.model().appendRow(it)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())

