Что-то похожее на QTableWidget :: currentCellChanged в QTableView? - PullRequest
1 голос
/ 03 ноября 2011

Я хочу, чтобы сигнал излучался, когда я либо щелкаю по ячейке, либо использую клавиши со стрелками, чтобы перейти к новой ячейке QTableView. Когда я использовал QTableWidget, я использовал сигналы currentCellChanged. Тем не менее, я не вижу аналогичного сигнала в QTableView - нет ничего подобного?

Спасибо

David

Ответы [ 4 ]

4 голосов
/ 03 ноября 2011

Вы можете использовать:

  • сигнал currentChanged(QModelIndex, QModelIndex) экземпляра QItemSelectionModel, возвращаемый QAbstractItemView::selectionModel(), или
  • для получения представления и переопределения функции QAbstractItemView::currentChanged(QModelIndex, QModelIndex).

PS: Если параметр является константной ссылкой (поэтому не const один или не & один), вы можете опустить const и & в SIGNAL и SLOT макросы:

connect(tableView->selectionModel(), 
        SIGNAL(currentChanged(QModelIndex, QModelIndex)), 
        ...
0 голосов
/ 26 апреля 2013

вы также можете использовать фильтры событий и повторно реализовать eventFilter для управления изменениями индекса, например:

MyWidget::MyWidget(QWidget* parent) : QWidget(parent), ui(new Ui::uiClass)
{
    ui->setupUi(this);
    ui->tableView->installEvenFilter(this);
    connect( ui->tableView, SIGNAL(activated(QModelIndex)), this,SLOT(manageNewIndex(QModelIndex)));

}



bool MyWidget::eventFilter(QObject* watched, QEvent* event)
{
    bool retVal = true;
    if(watched == ui->tableView && event->type() == QEvent::KeyPress)
    {
        QModelIndex index = ui->tableView->currentIndex();
        int row = index.row();
        int col = index.column();

        if(((QKeyEvent*)event)->key() == Qt::Key_Down)
        {
            index = index.sibling(row+1,col);
        }else if(((QKeyEvent*)event)->key() == Qt::Key_Up)
        {
            index = index.sibling(row-1,col);
        }
        if(index.isValid())
        {
            ui->tableView->setCurrentIndex(index);
            manageNewIndex(index);
        }
        retVal = true;
    }
    else
        retVal =  QWidget::eventFilter(watched,event);

    return retVal;
}
0 голосов
/ 03 ноября 2011

Кажется, что нет ничего более краткого, чем currentCellChanged QTableWidget, но QTableView наследует некоторые вещи из QAbstractItemView , которые вы можете использовать вместе, в частности, нажатие, ввод и нажатие сигналы для ввода с помощью мыши и keyPressEvent для ввода с клавиатуры. Единственное настоящее замечание, которое я вижу, это то, что они зависят от того, используете ли вы также модель, поскольку все это основано на текущем индексе действительной модели.

0 голосов
/ 03 ноября 2011

Вы должны переопределить этот метод :

virtual void selectionChanged ( const QItemSelection & selected, const QItemSelection & deselected )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...