使用Qt的QListWidget完成拖拽功能

本文介绍如何在Qt环境中使用QListWidget实现拖拽功能,包括设置IconMode显示模式,通过addTypeAndItems方法加载文件模型,以及利用slotCurrentIndexChanged方法处理类别切换时的列表更新。示例代码展示了添加模型文件、清空列表和添加项的操作,以实现在QListWidget中的拖放效果。
摘要由CSDN通过智能技术生成

代码逻辑:

1、         利用方法setViewMode(QListView::IconMode)来完成QListWidget的显示模式设置,即只显示图标模式。

2、         利用方法void addTypeAndItems(const QString& strRootPaht, const QString&strType)完成对给定文件中特定模型的读取工作(实现见附录)。

3、         利用方法void slotCurrentIndexChanged(int index)完成对不同的类别切换不同模型列表的功能(实现见附录)。

 

最终实现效果如下图所示:


拖放时的效果:

 

方法1:

voidCDockWidget::addTypeAndItems(const QString& strRootPaht, const QString&strType)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以通过以下步骤实现QListWidget拖拽功能: 1. 设置QListWidget拖拽模式为QtWidgets.QAbstractItemView.DragDrop模式,可以在类的构造函数中使用setDragDropMode()函数实现。 2. 设置QListWidget中Item的拖拽行为,默认情况下QListWidgetItem是可以被拖拽并创建副本的,可以通过重载QListWidgetItem的mimeData()函数实现自定义拖拽数据。 3. 设置QListWidget拖拽事件,可以使用dragEnterEvent()、dragLeaveEvent()、dragMoveEvent()和dropEvent()等函数实现。 下面是一个简单的例子,演示如何在pyqt6中实现QListWidget拖拽功能: ``` python from PyQt6 import QtCore, QtGui, QtWidgets class MyListWidget(QtWidgets.QListWidget): def __init__(self, parent=None): super().__init__(parent) self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop) self.setSelectionMode(QtWidgets.QAbstractItemView.SelectionMode.SingleSelection) def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: item = self.itemAt(event.pos()) if item and item.isSelected(): # 记录拖拽项的数据 mimeData = QtCore.QMimeData() mimeData.setText(item.text()) drag = QtGui.QDrag(self) drag.setMimeData(mimeData) drag.setHotSpot(event.pos() - item.pos()) # 开始拖拽操作 drag.exec_(QtCore.Qt.MoveAction) def dragEnterEvent(self, event): if event.mimeData().hasText(): event.acceptProposedAction() def dragMoveEvent(self, event): if event.mimeData().hasText(): event.acceptProposedAction() def dropEvent(self, event): if event.mimeData().hasText(): itemText = event.mimeData().text() item = QtWidgets.QListWidgetItem(itemText, self) item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsDropEnabled) event.acceptProposedAction() if __name__ == '__main__': app = QtWidgets.QApplication([]) win = QtWidgets.QWidget() layout = QtWidgets.QVBoxLayout(win) listWidget = MyListWidget(win) listWidget.addItem('item1') listWidget.addItem('item2') listWidget.addItem('item3') layout.addWidget(listWidget) win.show() app.exec_() ``` 在上面的例子中,重载了MyListWidget类,通过重载mousePressEvent()函数记录待拖拽项的数据,然后在拖拽事件中实现了拖拽的各个操作。通过这些步骤,就可以实现QListWidget拖拽功能了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值