2016-12-29 8 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

それはエレガントではないのですが、私はQTableViewからisColumnHidden()を使用して問題を解決してきました。私は隠されていないものを見つけるまで、列を繰り返しています。

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)に注意してください。 –

関連する問題