0

RHEL6 で qt5.2.1 を使用しています

likeの代わりにQTextBrowser使用する新しいウィジェットを使用または書き換える以外に、マウスポインターでテキストを個別に選択できるようにするにはどうすればよいでしょうか?QLabelQListWidgetItemQListWidget

たとえば、vim のようなテキスト エディターでは、テキストの上でマウス ボタンをドラッグ アンド クリックしてマウスを離すことができます。次に、別のエディターまたはターミナルでマウスを中クリックすると、それが貼り付けられます。私はそれを行う方法を知っていますQClipboardが、問題はそもそもテキストが選択できないことです。1回のクリックで行全体を選択できるようにしたいので、を使用していQListWidgetますが、マウスを押したままドラッグすると、個々のテキストを選択できるようにしたいと思います。

TL;DR : AにはマウスにするQLabel機能があります。setTextInteractionFlagsselectableQListWidgetItem

4

1 に答える 1

1

inQListWidgetを使用できsetEditTriggers(QtWidgets.QAbstractItemView.SelectedClicked) 、すべてのアイテムsetFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsEditable)に対して、最初のクリックでアイテムが選択され、

アイテムが選択されました

2番目に穴のテキスト

すべてのテキストが選択されました

テキストの一部をマウスで選択できます

選択されたテキストの一部

編集 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

このデリゲートを listwiget に使用します。

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 に答える