首页 > 解决方案 > 在具有多层选项卡小部件的小部件中处理选项卡顺序

问题描述

我正在尝试使用 QT creator 为 QgIS 构建一个插件。该插件混合了不同的Forms,支持生成图表和报告。

使用某些表单时,我希望能够使用 tab 键在表单中导航。问题是我必须使用多层选项卡小部件,而且用户界面似乎只有一个全局tab order列表?我想tab order每个标签有一个单独的,这有意义吗?可能吗?

我在 QT 中激活tab order并打印了一个屏幕,我知道如何更改顺序,但是如果我有其他 100 个项目,按正确的顺序单击所有内容会非常麻烦。

选项卡中的选项卡

标签: qttabs

解决方案


你基本上有2个选项。

第一个是从设计器 GUI 设置所有 100 多个选项卡。您可以在选项卡模式下通过使用设计区域右侧的所有小部件的概述在选项卡之间切换。请注意,在内部,它仅存储在选项卡焦点中的“哪个小部件跟随哪个”。设计器中的编号只是为了使这个“链接”可见。但是,此变体的最大问题是,无论何时从 UI 中添加或删除某些内容,您都必须重做整个过程。

因此,您应该适当地使用第二个变体并在调用 setupUi 函数后在代码中执行制表符。这是通过QWidget::setTabOrder函数完成的。它告诉每个小部件在获得焦点并按下选项卡时接下来要关注哪个小部件。一个简单的例子是:

MyClass::MyClass(QWidget *parent) : 
    QWidget{parent},
    ui{new Ui::MyClass}
{
    ui->setupUi(this);

    QWidget::setTabOrder(ui->outerTabBar, ui->innerTabBar);
    QWidget::setTabOrder(ui->comboBox1, ui->button1);
    // ....
}

推荐阅读