Хорошо, выложу вам кусок своего кода, опять же, это не полностью вся программа, а именно тот кусок где я использую QStackedWidget.
MainWidget::MainWidget(QWidget *parent = 0) : QWidget(parent)
{
// Виджет для упражнения "мозаика".
mosaicWidget = new MosaicWidget(this);
// Виджет для упражнения "карточка".
cardWidget = new CardWidget(this);
// Виджет для упражнения "написание".
cardWidget = new CardWidget(this);
// Соединяем сигнал окончания упражнения со слотом настройки следующего виджета
connect(mosaicWidget, SIGNAL(finished()), this, SLOT(setupNextLesson()));
stackedWidget->addWidget(mosaicWidget);
.. // Аналогично для всех остальных
}
MainWidget::setupNextLesson()
{
// Получаем случайный индекс от 0 до 2
int randomIndex = qrand() % 3;
// Настраиваем определенный виджет для показ
switch(randomIndex)
0 : mosaicWidget->setup(); break();
1 : cardWidget->setup(); break();
2 : writeWidget->setup(); break();
// Непосредственно активируем нужный на виджет
stackedWidget->setCurrentIndex(randomIndex);
updateStatusBar();
}
p.s. Пример я изменил для простоты, в реале все мои виджеты наследуются от одного абстрактного класса, в который вынесены общие методы, в итоге код становился меньше и читабельней.