禁用QListView中的拖动图像

时间:2014-09-04 22:38:44

标签: qt drag qlistview

从QListView拖动项目/图标时是否可以禁用拖动像素图。

我的应用程序将拖动的项目悬停在视图上方时执行自定义渲染。但是,由于我已将我的应用程序移植到Qt5,列表视图的拖动项似乎总是在拖动操作期间显示装饰角色。我想禁用它,因为我的自定义渲染更准确。

2 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解你想要的东西,但是如果你想禁用拖动像素图,你可以在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)

答案 1 :(得分:0)

您可以使用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_())