Как сделать так чтобы при выборе объекта в 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_())

введите сюда описание изображения

→ Ссылка