无法突出显示/选择QListWidgetItem的文本

时间:2015-03-05 18:38:55

标签: qt qlistwidget qlistwidgetitem

我在RHEL6上使用qt5.2.1

除了使用QTextBrowser或重写使用QLabel而非QListWidgetItem QListWidget的新窗口小部件外,我还能如何使用QClipboard单独选择文本鼠标指针?

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

TL; DR setTextInteractionFlags具有selectable功能,您可以将其设为鼠标QListWidgetItem,如何为{{1}}执行此操作?

1 个答案:

答案 0 :(得分:1)

可以使用QListWidget中的

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

item selected

第二个洞文本

all text selected

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

part of text selected

编辑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

并将此委托用于listwidget:

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)

代表,用户无法编辑项目的文本,他们只能从他那里复制