2016-12-29 64 views
1

我有一个自定义QTableViewQAbstractTableModel。我的QTableView隐藏了QAbstractTableModel中的一些列,因为它们不是必需的。选项卡到QTableView中的下一个可见列

当我点击标签,我想选择下一个可用(可编辑)列。我目前的实现是从QAbstractTableModel获取下一个索引,但是此索引包含隐藏的列。 (所以打标签时,它可能是一对夫妇印刷机看到选择“下一步”栏前。)

我怎么能告诉标签跳转到下一个可见的列?

该语言是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)); 
    } 
} 

回答

0

这不是优雅,但我已经用isColumnHidden()QTableView解决了这个问题。我只是遍历列,直到找到一个没有隐藏的列。

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

请注意void QHeaderView :: setSectionsMovable(bool movable) –

相关问题