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

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

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

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

【问题讨论】:

    标签: c++ qt tabs widget qtabwidget


    【解决方案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)));
        }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多