QTreeWidget
ファイルブラウザに使用しようとしています。選択 (操作が適用されるアイテム) とカーソル (選択を拡張するために使用できる) の概念を分離したいと考えています。Total Commander のように: 赤は選択範囲で、Shift キーを押さない限り、カーソルを移動しても選択範囲には影響しません。
QTreeWidget でこれを実装する適切な方法はありますか? それともきちんとしていませんが、少なくとも機能しており、イベントの半分を手動で処理する必要はありませんか?
QTreeWidget
ファイルブラウザに使用しようとしています。選択 (操作が適用されるアイテム) とカーソル (選択を拡張するために使用できる) の概念を分離したいと考えています。Total Commander のように: 赤は選択範囲で、Shift キーを押さない限り、カーソルを移動しても選択範囲には影響しません。
QTreeWidget でこれを実装する適切な方法はありますか? それともきちんとしていませんが、少なくとも機能しており、イベントの半分を手動で処理する必要はありませんか?
ウィジェットの選択モードを に設定するQAbstractItemView::ExtendedSelection
と、ユーザーは を押しながら矢印キーを使用して、選択を変更せずにアイテム間を移動できますCtrl。この動作を変更したい場合はkeyPressEvent
、次のように再実装する必要があります。
void MyWidget::keyPressEvent(QKeyEvent *event) {
if (event->key() == Qt::Key_Down ||
event->key() == Qt::Key_Up) {
event->setModifiers(Qt::ControlModifier);
}
QTreeWidget::keyPressEvent(event);
}
ユーザーがUpまたはDownキーを押すと、現在のアイテムが変更され、選択は変更されません。このソリューションをテストしました。
デフォルトで選択を変更する pageup、pagedown、home、end (およびその他のキー) のキーもあることに注意してください。これらのイベントも処理する必要がある場合があります。