2016-12-29 97 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) –

相關問題