Pyside6 QTableview/QListwidget 点击按钮上下移动条目(item)

虽然用的是pyside6,不过其他pyqt什么的也都一样的。网上关于这个细则的范例韩真是比较少,有的也非常复杂难懂。就这么个东西折腾了大半天,因为资料实在是比较少,QT网站那个文档实在是不友好,我一直在select方向(往光标所在行的方向上去思考了)的方法上折腾,后来才看见这个setCurrentRow的方法……当然最早也没注意到takeItem这个方法。算是给自己留个学习笔记吧。

def dataup(self):
    currentRow = self.ui.listWidget.currentRow()
    currentItem = self.ui.listWidget.takeItem(currentRow)
    if currentRow >0 :
        newRow=currentRow-1
    else:
        newRow=currentRow

    self.ui.listWidget.insertItem(newRow, currentItem)
    #下面这个主要是为了让光标随着移动的item而移动,这样可以连续点按按钮
    self.ui.listWidget.setCurrentRow(newRow)
    

def datadown(self):
    currentRow = self.ui.listWidget.currentRow()
    currentItem = self.ui.listWidget.takeItem(currentRow)
    if currentRow < self.ui.listWidget.count():
        newRow=currentRow+1
    else:
        newRow=currentRow
    self.ui.listWidget.insertItem(newRow, currentItem)
    self.ui.listWidget.setCurrentRow(newRow)

不过我就想,这其实应该是很普通的功能吧(包括列表内拖动排序,默认的那个简直屎一样),QT Desinger貌似没有内置,实在是不可原谅。