用新的小部件替换 QTabWidget 的页面

Posted

技术标签:

【中文标题】用新的小部件替换 QTabWidget 的页面【英文标题】:Replace page of a QTabWidget with a new widget 【发布时间】:2012-04-21 21:38:39 【问题描述】:

基本上我有一个 QTabWidget。起初它有一个表单小部件,widget1。完成与该表单的交互后,新的 widget2 表单应接管同一选项卡。

我认为tabWidget->setCurrentWidget(new widget2()); 会起作用,但它基本上是setCurrentIndex(int) 的过载。

有谁知道这样做的方法吗?

【问题讨论】:

【参考方案1】:

您可以在标签或其他地方使用QStackedWidget 来处理此类事情。

将您要在该选项卡中显示的所有小部件放在单个 QStackedWidget 中,然后将该堆叠的小部件放在一个选项卡中。

这是一个快速的演示:

#include <QtGui>

class W: public QWidget

    Q_OBJECT

    public:
    W(QWidget *parent=0): QWidget(parent)
    
        // stacked widget displays one of its "children" at a time
        QStackedWidget *sw = new QStackedWidget;
        QPushButton *b1 = new QPushButton("hello");
        sw->addWidget(b1);
        QPushButton *b2 = new QPushButton("world");
        sw->addWidget(b2);

        // tab widget and simplistic layout
        QTabWidget *tw = new QTabWidget(this);
        tw->addTab(sw, "tab");
        QHBoxLayout *l = new QHBoxLayout;
        l->addWidget(tw);
        setLayout(l);

        // signal mapper to demo the widget switching
        QSignalMapper *m = new QSignalMapper(this);
        connect(b1, SIGNAL(clicked()), m, SLOT(map()));
        m->setMapping(b1, 1);
        connect(b2, SIGNAL(clicked()), m, SLOT(map()));
        m->setMapping(b2, 0);
        connect(m, SIGNAL(mapped(int)), sw, SLOT(setCurrentIndex(int)));
    
;

【讨论】:

以上是关于用新的小部件替换 QTabWidget 的页面的主要内容,如果未能解决你的问题,请参考以下文章

拦截并忽略 QTabWidget 中的***事件

访问 QTabWidget 中选项卡的小部件

仅为 QTabWidget 中的选项卡显示工具提示,而不是整个小部件

如何访问 QTabWidget 不同选项卡中的小部件?

使用 Qtabwidget 中的小部件

升级的小部件不会出现在使用qt designer创建的主应用程序中