Отключение перетаскивания изображения в QListView

Можно ли отключить растровое изображение перетаскивания при перетаскивании элемента/значка из QListView.

Мое приложение выполняет пользовательский рендеринг перетаскиваемого элемента при наведении его над представлением. Однако, поскольку я перенес свое приложение на Qt5, кажется, что перетаскиваемый элемент представления списка всегда показывает роль украшения во время операции перетаскивания. Я хотел бы отключить это, так как мой пользовательский рендеринг более точен.


person Fabian    schedule 04.09.2014    source источник


Ответы (2)


Я не уверен, что полностью понимаю, чего вы хотите, но если вы хотите отключить растровое изображение перетаскивания, вы можете просто установить пустое растровое изображение в методе startDrag, т.е.

drag = QtGui.QDrag(self)
# Create empty mimedata just to initilize the Qdrag.
mimeData = QtCore.QMimeData()
mimeData.setData("text/plain", "")
drag.setMimeData(mimeData)

pixmap = QtGui.QPixmap()
# Empty pixmap. No drag icon
drag.setPixmap(pixmap)
...
drag.exec_(QtCore.Qt.MoveAction)
person finmor    schedule 07.09.2014
comment
Спасибо. Это действительно то, как настроить это при ручном запуске операции перетаскивания. Однако при использовании представления в виде списка по умолчанию будет выполняться запуск операции перетаскивания (в QIconModeViewBase::filterStartDrag). И там всегда кажется, что устанавливается растровое изображение. Есть ли способ изменить поведение этого списка? - person Fabian; 08.09.2014

Вы можете использовать функцию QListWidget.setMovement(). Функция принимает QListView::Movement movement, а QListView.Static отключает перемещение значков .

Вот пример кода из pyqt5:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys

class DisableMoving(QWidget):
    def __init__(self):
        super().__init__()

        self.list_widget = QListWidget(self)
        self.list_widget.setViewMode(QListView.IconMode)
        self.list_widget.setFlow((QListView.LeftToRight))
        self.list_widget.setResizeMode(QListView.Adjust)
        # setMovement
        self.list_widget.setMovement(QListView.Static)

        item_1 = QListWidgetItem()
        item_1.setIcon(QIcon('1.jpg'))
        self.list_widget.addItem(item_1)

        item_2 = QListWidgetItem()
        item_2.setIcon(QIcon('2.jpg'))
        self.list_widget.addItem(item_2)

        self.setGeometry(300, 300, 800, 600)
        self.setWindowTitle('Disable icon moving')
        self.show()



if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = DisableMoving()
    sys.exit(app.exec_())
person Echan    schedule 05.07.2019