0

我在 RHEL6 上使用 qt5.2.1

除了使用QTextBrowser或重写一个使用QLabel而不是QListWidgetItemlike的新小部件之外QListWidget,我如何能够使用鼠标指针单独选择文本?

例如,在像 vim 这样的文本编辑器中,您可以在某些文本上拖动鼠标按钮并释放鼠标,然后您可以在不同的编辑器或终端中单击鼠标中键并将其粘贴。我知道如何做到这一点,QClipboard但问题是首先无法选择文本。我仍然希望通过单击来选择整行,这就是我使用 a 的原因QListWidget,但是如果我按住并拖动鼠标,我希望能够选择单个文本。

TL;DR:AQLabel具有setTextInteractionFlags可以使其成为鼠标的功能,selectable我该如何为 a 做到这一点QListWidgetItem

4

1 回答 1

1

inQListWidget可以setEditTriggers(QtWidgets.QAbstractItemView.SelectedClicked) 用于所有项目setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsEditable),然后在第一次单击时选择项目,

选择的项目

在第二个洞文本

选择的所有文本

并且可以通过鼠标选择部分文本

选定的部分文本

编辑 24.03.2015

为了防止用户以这种方式编辑子类QstyledItemDelegate(我在 PyQt5 中做到了)

class MyDelegate(QtWidgets.QStyledItemDelegate):
    def __init__(self):
        QtWidgets.QStyledItemDelegate.__init__(self) 

    def setModelData(self,editor,model,index):
        pass # no changes are written to model

并将此委托用于列表小部件:

self.delegate = MyDelegate()
self.listWidget.setItemDelegate(self.delegate)

用户可以删除或更改项目文本,编辑完成后会出现原始文本

编辑 25.03.15:添加

def eventFilter(self,editor,event):
    if event.type() == QtCore.QEvent.KeyPress and event.key() not in (QtCore.Qt.Key_Control, QtCore.Qt.Key_C):
        return True
    return QtWidgets.QStyledItemDelegate.eventFilter(self, editor, event)

给委托人,用户不能编辑项目的文本,他们只能从他那里复制

于 2015-03-22T23:25:22.030 回答