RidesTheShortBus
RidesTheShortBus

Reputation: 51

QListWidgetItem's text can't be highlighted / selected

I'm using qt5.2.1 on RHEL6

Aside from using QTextBrowser or rewriting a new widget that uses QLabel instead of QListWidgetItem like QListWidget, how would I be able to make the text individually selectable with the mouse pointer?

For example in a text editor like vim you can drag-click the mouse button over some text and release the mouse, and then you can middle mouse click in a different editor or terminal and it pastes it. I know how to do that through QClipboard but the problem is that the text isn't selectable in the first place. I still want the entire row to be selectable on a single click, which is why I'm using a QListWidget, but if I hold and drag the mouse I'd like to be able to select individual text.

TL;DR: A QLabel has the function setTextInteractionFlags where you can make it mouse selectable, how can I do that for a QListWidgetItem?

Upvotes: 0

Views: 1551

Answers (1)

a_manthey_67
a_manthey_67

Reputation: 4306

in QListWidget can be used setEditTriggers(QtWidgets.QAbstractItemView.SelectedClicked) and for all items setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsEditable), then on first click the item is selected,

item selected

on second the hole text

all text selected

and a part of text can be selected by mouse

part of text selected

Edit 24.03.2015

To prevent editing by user on this way subclass QstyledItemDelegate (i did it in 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

and use this delegate for listwidget:

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

users can delete or change the items text, when editing is finished, the original text appears

Edit 25.03.15: add

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)

to the delegate and users can't edit the text of the items, they only can copy from him

Upvotes: 1

Related Questions