2016-05-27 3 views
1

У меня есть QTableView, и я хотел, чтобы пользователь мог выбрать целую строку, а не отдельную ячейку. Поэтому я изменил поведение выбора, как показано ниже.Пройдите через строки QTableView с помощью клавиши табуляции

table->setSelectionBehavior(QAbstractItemView::SelectRows)

Но теперь, когда клавиша нажата вкладка она еще ходит через отдельные клетки, а не весь ряд. Я хочу, чтобы пользователь мог пройти через каждую строку, а не отдельные ячейки.

+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: 

};