2012-04-21 2 views
1

В основном у меня есть QTabWidget. Сначала он имеет виджет формы, widget1. После того, как эта форма будет взаимодействовать, новая форма виджета2 должна взять ту же самую вкладку.Замените страницу QTabWidget новым виджетами

Я думал, что tabWidget->setCurrentWidget(new widget2()); будет работать, но это в основном перегрузка для setCurrentIndex(int).

Кто-нибудь знает, как это сделать?

ответ

3

Вы можете использовать QStackedWidget для этого типа вещей, на вкладке или в другом месте.

Поместите все виджеты, которые вы хотите отобразить на этой вкладке внутри одного QStackedWidget, и поместите этот сложный виджет на вкладку.

Вот quick'n'dirty демо:

#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))); 
    } 
}; 
+0

Благодаря будет идти с этим. – user1334943

Смежные вопросы