Задать вопрос
vitall
@vitall

Пример Qt программы с использованием QStackedWidget?

Я только изучаю qt и надумал написать программу, окно которой перерисовывается после нажатия кнопки, как например при установки программы, но при этом мне надо что бы была некая цикличность переходов и как я понял этот класс мне подходит, только в учебниках он практически не рассматривается.
  • Вопрос задан
  • 20630 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Artemzr
@Artemzr
Хорошо, выложу вам кусок своего кода, опять же, это не полностью вся программа, а именно тот кусок где я использую 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. Пример я изменил для простоты, в реале все мои виджеты наследуются от одного абстрактного класса, в который вынесены общие методы, в итоге код становился меньше и читабельней.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Artemzr
@Artemzr
а что там рассматривать? Берем виджет на котором будем манипулировать, и в его конструкторе прописываем следующее:
class MainWidget::MainWidget(QWidget *parent = 0) : QWidget(parent)
{ 
   ...
   stackedWidget = new QStackedWidget(this);
   stackedWidget->addWidget(someWidget1);
   stackedWidget->addWidget(someWidget2);
   ...
   setCentralWidget(stackedWidget);

}


Для переключения виджетов, необходимо связать например вот такой слот с каким-либо сигналом (щелчок на кнопки):

void MainWidget::buttonClicked()
{
   stackedWidget->setCurrentIndex(index);
}


Где index это номер вашего виджета.
Ответ написан
Vass
@Vass
C++/Qt Developer
Писал на конференции по Maemo в Москве программульку, код здесь. Там есть QStackedWidget, мб подойдет.
Ответ написан
silvansky
@silvansky
Мой проект: code.google.com/p/qcheckersmobile/
Там основное окно его использует. Просто и, как мне кажется, понятно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы