【发布时间】:2014-09-04 22:38:44
【问题描述】:
从 QListView 拖动项目/图标时是否可以禁用拖动像素图。
我的应用程序在将拖动项悬停在视图上方时执行自定义呈现。但是,由于我已将我的应用程序移植到 Qt5,因此列表视图的拖动项似乎总是在拖动操作期间显示装饰角色。我想禁用它,因为我的自定义渲染更准确。
【问题讨论】:
从 QListView 拖动项目/图标时是否可以禁用拖动像素图。
我的应用程序在将拖动项悬停在视图上方时执行自定义呈现。但是,由于我已将我的应用程序移植到 Qt5,因此列表视图的拖动项似乎总是在拖动操作期间显示装饰角色。我想禁用它,因为我的自定义渲染更准确。
【问题讨论】:
我不确定我是否完全理解你想要什么,但如果你想禁用拖动像素图,你可以在 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)
【讨论】:
您可以使用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_())
【讨论】: