1

QTreeWidgetファイルブラウザに使用しようとしています。選択 (操作が適用されるアイテム) とカーソル (選択を拡張するために使用できる) の概念を分離したいと考えています。Total Commander のように: 赤は選択範囲で、Shift キーを押さない限り、カーソルを移動しても選択範囲には影響しません。

ここに画像の説明を入力

QTreeWidget でこれを実装する適切な方法はありますか? それともきちんとしていませんが、少なくとも機能しており、イベントの半分を手動で処理する必要はありませんか?

4

1 に答える 1

2

ウィジェットの選択モードを に設定する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 (およびその他のキー) のキーもあることに注意してください。これらのイベントも処理する必要がある場合があります。

于 2013-08-09T19:45:12.933 に答える