2016-12-31 7 views
4

QTreeViewにモデルの項目が設定されています。インデックスにedit()への呼び出しが行われると、カスタムエディターが表示されます。エディタは2つのQLineEditウィジェットで構成されています。QAbstractItemViewタブ項目の編集中にフォーカス

enter image description here

私は、タブを押したときにフォーカスが2つのQLineEditウィジェットを切り替えたいです。しかし、Tabキーを押すと、私のプログラム上の他のすべてが循環します。すべての私のQPushButtonQTabWidgetオブジェクトは、私のエディタとは全く違うウィジェットであっても、タブ順に含まれています。

setTabOrder()を使用してタブオーダーを設定しようとしましたが、これは2つのQLineEditウィジェットの間でループしますが、それでもエディターウィジェットは周囲のウィジェットから切り離されません。なぜこうなった?

注:他の場所でタブの順序を無効にしようとしているわけではありません。ただちに私のエディタに隔離してください。

ありがとうございました!次のように

+0

は、あなたがしようとしているものを表示します。 – eyllanesc

+0

@eyllanesc私はしました。私は、タブの順序を設定しようとしていると言いました(特に、最初からループしています)が、無視されました。私が試したもう一つのことは、私が望んでいない、フォーカスされている他のすべてのウィジェットのフォーカスを無効にすることでしたが、明らかに問題は、編集していないときにタブをフォーカスできるようにすることです。 – mrg95

+0

**ドキュメント**をご覧ください。それは必ずしもこれを助けるとは限りませんが、非常によく役立ちます。 –

答えて

2

これは簡単にQWidget::focusNextPrevChildを使用して実装することができます。

class EditWidget : public QWidget 
{ 
public: 
    EditWidget(QWidget *pParent) : QWidget(pParent) 
    { 
    QHBoxLayout *pLayout = new QHBoxLayout(this); 
    setLayout(pLayout); 
    pLayout->addWidget(m_pEdit1 = new QLineEdit()); 
    pLayout->addWidget(m_pEdit2 = new QLineEdit()); 
    } 

    bool focusNextPrevChild(bool next) 
    { 
    if (m_pEdit2->hasFocus()) 
     m_pEdit1->setFocus(); 
    else 
     m_pEdit2->setFocus(); 
    return true; // prevent further actions (i.e. consume the (tab) event) 
    } 

protected: 
    QLineEdit *m_pEdit1; 
    QLineEdit *m_pEdit2; 
}; 
+0

完了!どうもありがとうございます!私は答えがとてもシンプルだったので、とても長い時間がかかったことに驚いています。これはまさに私が探していたものです:D:D:D – mrg95

関連する問題