2016-05-27 10 views
1

私はQTableViewですが、私はユーザーが個々のセルではなく行全体を選択できるようにしたいと考えていました。そこで以下のように選択動作を変更しました。QTableViewの行をタブキーで歩く

table->setSelectionBehavior(QAbstractItemView::SelectRows)

しかし、Tabキーをクリックしたときに、今それはまだ個々のセルではなく、行全体をウォークスルー。ユーザーが個々のセルではなく各行を歩き回ることができるようにしたい。

+1

「タブをクリックしたとき」とはどういう意味ですか?タブキーを意味しますか?また、選択されフォーカスされた( "現在"の)アイテムがあることにも注意してください。もし 'SelectRows'ビヘイビアを設定した場合、選択は完全な行になりますが、フォーカスはまだセルレベルにあります。 –

+0

@ Karsten Koopはい、私はキーボードのタブキーを意味しました。また、ユーザーが行のいずれかの部分をクリックすると、行全体が強調表示され、選択されている必要があります。私は、QTableViewに個々のセルを考慮させたくありませんが、行は単一の項目と見なすべきです。 –

+0

'SelectRows'を設定した後、セレクション(青色のハイライト表示)はまだセルレベルにありますか?これは奇妙なことかもしれませんが、おそらく、これが設定されない、またはリセットされないその他の理由があります。どの時点で 'setSelectionBehaviour'を呼び出しますか?ビューを作成した直後ですか? –

答えて

3

QTableViewクラスを継承し、keyPressEvent()を上書きする必要があります。例:

#include <QTableView> 
#include <QKeyEvent> 

class CustomView : public QTableView 
{ 
    Q_OBJECT 

    // QWidget interface 
protected: 
    void keyPressEvent(QKeyEvent *event) { 
     switch(event->key()) { 
     case Qt::Key_Tab: { 
      if(currentIndex().row() != model()->rowCount()) 
       selectRow(currentIndex().row() + 1); 
      break; 
     } 
     default: QTableView::keyPressEvent(event); 
     } 
    } 

public: 
    explicit CustomView(QWidget *parent = 0); 
    ~CustomView(){} 

signals: 

public slots: 

}; 
関連する問題