我在RHEL6上使用qt5.2.1
除了使用QTextBrowser
或重写使用QLabel
而非QListWidgetItem
QListWidget
的新窗口小部件外,我还能如何使用QClipboard
单独选择文本鼠标指针?
例如,在像vim这样的文本编辑器中,您可以在某些文本上拖动鼠标按钮并释放鼠标,然后您可以在不同的编辑器或终端中单击鼠标,然后粘贴它。我知道如何通过QListWidget
来做到这一点,但问题是文本首先是不可选择的。我仍然希望只需点击一下即可选择整行,这就是我使用QLabel
的原因,但如果我按住并拖动鼠标,我希望能够选择个人文本。
TL; DR :
setTextInteractionFlags
具有selectable
功能,您可以将其设为鼠标QListWidgetItem
,如何为{{1}}执行此操作?
答案 0 :(得分:1)
QListWidget
中的 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
并将此委托用于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)
代表,用户无法编辑项目的文本,他们只能从他那里复制