C++ QAbstractItemView选项卡在编辑项目时聚焦

C++ QAbstractItemView选项卡在编辑项目时聚焦,c++,qt,C++,Qt,我有一个QTreeView,其中填充了模型中的项目。对索引调用edit()时,将显示一个自定义编辑器。编辑器由两个QLineEdit小部件组成 当按下Tab键时,我希望焦点在两个QLineEdit小部件之间切换。但是,按Tab键可以循环执行程序中的所有其他操作。所有我的QPushButton和QTabWidget对象都包含在选项卡顺序中,即使它们与我的编辑器完全不同 我尝试使用setTabOrder()设置选项卡顺序,在两个QLineEdit小部件之间循环,但是这仍然无法将编辑器小部件与周围的

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

当按下Tab键时,我希望焦点在两个
QLineEdit
小部件之间切换。但是,按Tab键可以循环执行程序中的所有其他操作。所有我的
QPushButton
QTabWidget
对象都包含在选项卡顺序中,即使它们与我的编辑器完全不同

我尝试使用
setTabOrder()
设置选项卡顺序,在两个
QLineEdit
小部件之间循环,但是这仍然无法将编辑器小部件与周围的小部件隔离开来。为什么会这样

注意:我不想在其他任何地方禁用选项卡排序,只是暂时将其隔离到我的编辑器中


谢谢你的时间

这可以通过以下方式轻松实现:

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;
};

展示你所做的努力。@eyllanesc我做了。我说我试着设置一个标签顺序(特别是一个循环到开始的顺序),但是被忽略了。我尝试的另一件事是禁用所有其他我不想聚焦的小部件的聚焦,但问题显然是,当不编辑时,我希望能够对这些小部件进行选项卡聚焦。查看文档。这可能不一定会有帮助,但通常会有帮助。是的,我读过,这就是我读到的
setTabOrder
的工作原理,以及为什么我不能将其循环回到开始。这是我第一个去的地方,但有时当你不知道要找什么的时候就很难了。行编辑甚至会得到tab键事件,还是之前过滤掉了?太好了!非常感谢你!我很惊讶答案这么简单却花了这么长时间。这正是我想要的:D:D:D