编辑项目时QAbstractItemView选项卡焦点

时间:2016-12-31 04:40:44

标签: c++ qt

我有一个QTreeView填充了模型中的项目。在索引上调用edit()时,会显示自定义编辑器。该编辑器由两个QLineEdit小部件组成。

enter image description here

我希望焦点在按Tab键时在两个QLineEdit小部件之间切换。但是,按Tab键会循环浏览程序中的其他所有内容。我的所有QPushButtonQTabWidget对象都包含在Tab顺序中,即使它们与我的编辑器完全不同。

我尝试使用setTabOrder()设置标签顺序,以便在两个QLineEdit窗口小部件之间循环,但是这仍然不会将编辑器窗口小部件与周围的窗口小部件隔离开来。为什么会这样?

注意:我不打算在其他地方禁用标签排序,暂时将其隔离到我的编辑器中。

谢谢你的时间!

1 个答案:

答案 0 :(得分:3)

这可以使用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;
};