2015-03-05 10 views
0

Я использую qt5.2.1 на RHEL6QListWidgetItem не может быть выделен/выбран

Помимо использования QTextBrowser или перезаписи нового виджета, который использует QLabel вместо QListWidgetItem как QListWidget, как бы я быть в состоянии сделать текст можно индивидуально выбрать с помощью указателя мыши?

Например, в текстовом редакторе, таком как vim, вы можете перетащить мышью по какому-либо тексту мыши и отпустить мышь, а затем вы можете щелкнуть средним щелчком мыши в другом редакторе или терминале и вставить его. Я знаю, как это сделать через QClipboard, но проблема в том, что текст не выбирается в первую очередь. Я все же хочу, чтобы вся строка была выбрана одним щелчком мыши, поэтому я использую QListWidget, но если я удерживаю и перетаскиваю мышь, я бы хотел, чтобы я мог выбрать отдельный текст.

TL; DR: QLabel имеет функцию setTextInteractionFlags, где вы можете сделать это мышь selectable, как я могу это сделать для QListWidgetItem?

ответ

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) 

пользователи могут удалять или изменять текст элементов, когда редактирование закончено, исходный текст появляется

Edit 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) 

делегату и пользователи не могут изменить текст пунктов, они только могут скопировать из него

+0

Это работает, но элемент может быть изменен пользователем таким образом. Они могут выбирать текст, а затем удалять выделенный текст. Я только хочу, чтобы оно редактировалось через диалоговое окно, которое я использую, когда пользователь дважды щелкает элемент. – RidesTheShortBus

+0

см. Мой отредактированный ответ –