【问题标题】:QStackedWidget inside QTabWidget tab?QStackedWidget 在 QTabWidget 选项卡内?
【发布时间】:2023-03-23 02:05:01
【问题描述】:

在我的 QT 应用程序中,我使用 QTabWidget 作为基本导航。我在 ui 中设置的这个 QTabWidget。在 QTabWidget 的某些选项卡中,我需要 QStackedWidget 才能“在视图中向下钻取”。

我也尝试在 ui 中添加 QStackedWidget,但它会自动将页面添加到堆栈中。我想在代码中添加 QStackedWidget 的页面。如果我在代码中尝试这样做,stackedWidget 已经有一个标准页面,所以 myWidget 将是堆栈中的第二个。

MyWidget *myWidget = new MyWidget(ui.stackedWidget);
ui.stackedWidget->addWidget(myWidget);

在 QTabWidget 选项卡中设置 QStackedWidget 的最佳和最简单的方法是什么?

【问题讨论】:

    标签: qt qtabbar qtabwidget


    【解决方案1】:

    怎么样:

    QTabWidget *myTabWidget = new QTabWidget(this);
    QStackedWidget *myStackedWidget = new QStackedWidget(myTabWidget);
    
    myTabWidget->addTab(myStackedWidget, "Stacked Widget");
    

    您还可以在 Qt 的 Designer/Creator 中删除所有现有的堆栈页面。只需右键单击堆叠的小部件并删除所有现有页面。然后你可以使用addWidget()在代码中添加需要的页面。

    【讨论】:

    • 所以你认为我也应该在代码中创建 QTabWidget 吗?我认为在 ui 中创建它很好,但也许这不是一个好的解决方案。
    • 在设计器中似乎在右键单击时似乎可以删除除一个以外的所有页面。所以 QStackWidget 中总会有一个页面。
    • 在 Qt Creator 中,我也可以删除最后一页。顺便说一句,如果您无法在设计器中这样做,您可以使用文本编辑器编辑 .ui 文件以删除最后一页。此外,在代码中创建 QTabWidget 可能是一个好主意,因为它的工作量并不大。
    【解决方案2】:

    我想说 - 在 ui 中创建它,就像你做的那样(这样更容易布局/定位,稍后在选项卡上添加其他小部件等),但只需从代码并添加您的新代码。

    实际上 Qt 4.6 中的 Designer 允许从堆叠的小部件中删除所有页面 - 您需要右键单击,转到子菜单“Page X of Y”,然后选择删除。重复直到所有页面都消失了:)

    也许这是最近才添加到设计器中的,所以如果您有早期版本的 Qt,您可能仍需要从代码中删除它们。

    谈到将内容保留在 ui 中而不是将其保留在代码中,我会投票赞成“尽可能多地在 UI 文件中”:)

    【讨论】:

    • 是的,我也为 UI 投票! :) 但是我在构建我的应用程序(Symbian 的 QT)时使用了 Carbide,似乎我无法从设计器中删除,还是我错了?
    • 嗯,也许你有旧版本的 Qt for Symbian? IIRC Qt 4.6.1 也为 symbian 发布 - 它应该具有具有此类功能的新设计器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    相关资源
    最近更新 更多