3

デフォルトでは、 aは行QTreeWidgetの選択を管理します(行をクリックすると強調表示され、別の行をクリックすると強調表示されて前の行の選択が解除されます)、これは望ましくなく、オフにする方法がわかりません。

4

2 に答える 2

6

(から継承された)クラスを使用setSelectionModeして、コンポーネントに選択モードを設定しないようにすることができます。このようなもの(申し訳ありませんが、C ++のコード):QAbstractItemViewQTreeWidget

yourtreeView->setSelectionMode(QAbstractItemView::NoSelection);

この場合、アイテムは選択されませんが、アイテムの周りにフォーカス長方形が表示されます。これを修正するには、次のコマンドを呼び出して、フォーカスを受け入れないようにウィジェットを設定できます。

yourtreeView->setFocusPolicy(Qt::NoFocus);

ツリーウィジェットがフォーカスを受け入れる必要があるが、フォーカス長方形を描画するべきではない場合は、カスタムアイテムデリゲートを使用State_HasFocusして、アイテムを描画する前にアイテムの状態から状態を削除できます。このようなもの:

class NoFocusDelegate : public QStyledItemDelegate
{
protected:
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
};

void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const
{
    QStyleOptionViewItem itemOption(option);
    if (itemOption.state & QStyle::State_HasFocus)
        itemOption.state = itemOption.state ^ QStyle::State_HasFocus;
    QStyledItemDelegate::paint(painter, itemOption, index);
}

....

NoFocusDelegate* delegate = new NoFocusDelegate();
yourtreeView->setItemDelegate(delegate);
于 2010-01-10T01:09:52.847 に答える
1

上記の回答に感謝します。Pythonのバージョンは(^ ^)だと思います。

yourtreeView.setSelectionMode(QAbstractItemView.NoSelection)
yourtreeView.setFocusPolicy(QtCore.Qt.NoFocus)
于 2019-05-08T08:07:44.623 に答える