将 QTabWidget 的页面替换为新的小部件

Replace page of a QTabWidget with a new widget

本文关键字:小部 QTabWidget 替换      更新时间:2023-10-16

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

我以为tabWidget->setCurrentWidget(new widget2());会起作用,但这基本上是setCurrentIndex(int)的超载.

有谁知道一种方法可以做到这一点?

您可以在选项卡或其他地方对此类内容使用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)));
    }
};