2016-11-21 15 views
0

私はQTableViewのカスタムデリゲートを使用しています。デフォルトのQLineEditエディタウィジェットの代わりに、QLineEditの隣にコンボボックスを入れたいと思います。カスタムエディタが正しく表示され、テキストボックスに入力してタブを押してテーブルの次の行に移動すると、次の行がスキップされ、その下の2行のセルの編集が開始されます。タブを使用する代わりに、Enterキーを使用すると、期待どおりに次の行に移動します。誰かがタブキーの動作で何が起きているのかここで説明できますか?QTableViewのタブを使用すると、一度に2行移動する

私のテーブルには2つのカラムがあり、2番目のカラムだけが編集可能です。そのため、エディタを下の行に移動する必要があります。

私はこのようなQStyledItemDelegateから継承して私のカスタムデリゲートを作っ:

class ParameterDelegate: public QStyledItemDelegate { 
public: 
    QWidget* createEditor(QWidget* parent, const QStyledItemDelegate& option, const QModelIndex& index) { 
     QWidget* widget = new QWidget(parent); 
     widget->setLayout(new QHBoxLayout()); 
     widget->layout()->addWidget(new QLineEdit()); 
     widget->layout()->addWidget(new QComboBox()); 
     widget->layout()->setContentsMargins(0, 0, 0, 0); 
     widget->layout()->setSpacing(0); 
     return widget; 
    } 
}; 

答えて

0

解決策は非常に単純であることが判明。

class MyCustomEditorWidget: public QWidget { 
public: 
    bool focusNextPrevChild(bool next) {return false;} 
}; 

その後MyCustomEditorWidgetの新しいインスタンスを返す/作成するQStyledItemDelegate::createEditor再実装にコードを変更します:

QWidget* widget = new MyCustomEditorWidget(); 
//etc. 
このようなサブクラス QWidgetfalseを返すために QWidget::focusNextPrevChildを再実装、
関連する問題