Tab键到QTableView中的下一个可见列

时间:2016-12-29 15:53:20

标签: c++ qt

我有自定义QTableViewQAbstractTableModel。我的QTableView隐藏了QAbstractTableModel中的一些列,因为它们不是必需的。

当我点击 Tab 时,我想选择下一个可用(可编辑)列。我当前的实现是从QAbstractTableModel获取下一个索引,但是此索引包含隐藏的列。 (因此,当你点击 Tab 时,可能会有几次按下,然后才会看到" next"列被选中。)

如何判断 Tab 跳转到下一个可见列?

语言是C ++。以下是我QTableView中的代码:

void keyPressEvent(QKeyEvent* event)
{
    if((event->modifiers() == Qt::KeyboardModifier::NoModifier) && (event->key() == Qt::Key::Key_Tab))
    {
        this->moveToNextCell();
    }
    else
    {
        this->QTableView::keyPressEvent(event);
    }
}

void moveToNextCell()
{
    const QModelIndex index = this->currentIndex();
    int nextColumn = index.column() + 1;

    if(index.column() <= lastEditableCol)
    {       
        this->setCurrentIndex(model->index(index.row(), nextColumn));
    }
}

1 个答案:

答案 0 :(得分:0)

它并不优雅,但我使用isColumnHidden()中的QTableView解决了这个问题。我只是遍历列,直到找到一个不被隐藏的列。

for(int i = nextColumn; i <= numOfColumns && nextColumn <= numOfColumns; i++)
{
    if(this->isColumnHidden(nextColumn) == true)
    {
        nextColumn += 1;
    }
    else
    {
        i = numOfCol + 1;
    }
}