我有一个QTreeView填充了模型中的项目.在索引上调用edit()时,将显示自定义编辑器.该编辑器由两个QLineEdit小部件组成.
我希望焦点在按Tab键时在两个QLineEdit小部件之间切换.但是,按Tab键会循环浏览程序中的其他所有内容.我的所有QPushButton和QTabWidget对象都包含在Tab顺序中,即使它们是与我的编辑器完全不同的小部件.
我已经尝试使用setTabOrder()设置Tab键顺序,以在两个QLineEdit小部件之间循环它,但是这仍然不会将编辑器小部件与周围的小部件隔离开来.为什么会这样?
注意:我不打算在其他任何地方禁用标签排序,暂时将其隔离到我的编辑器.
谢谢你的时间!
最佳答案 这可以使用
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;
};