2013-11-22 78 views
5

我已经使用Qt Designer设计了一个用户界面,并且已经使用“编辑标签顺序”模式设置了标签顺序。获得焦点(或标签)顺序

现在我想知道的(出于其他原因,不是那么重要)是如何获得UI中特定QWidget的Tab顺序?

我的意思是,如果我有几个小部件,并说Tab顺序已定,有没有办法做这样的事情:

int nb = widget1->getTabOrder(); 

回答

10

有没有办法让Tab顺序为整数。 如果您查看ui工具从您的ui文件创建的C++代码,它将调用QWidget::setTabOrder()几次,该方法只需要两个QWidget指针。因此,Qt内部甚至不会将制表符的顺序存储为整数,而是将其作为指针的链接列表QWidget

您可以使用QWidget::nextInFocusChain()QWidget::previousInFocusChain()查询该链接列表。这将为您提供小部件的整个焦点链,其中包含其内部的所有子部件,并以正确的顺序排列。然后,您可以通过检查其focusPolicy,启用状态和可见状态来获得真正的Tab键顺序列表,就像QWidget::focusNextPrevChild()函数的内部实现一样。如果你真的需要一个整数索引,你需要自己设计一个算法,从那个获得的Tab顺序列表中计算索引。