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

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

Я только изучаю qt и надумал написать программу, окно которой перерисовывается после нажатия кнопки, как например при установки программы, но при этом мне надо что бы была некая цикличность переходов и как я понял этот класс мне подходит, только в учебниках он практически не рассматривается.
  • Вопрос задан
  • 20706 просмотров
Подписаться 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/
Там основное окно его использует. Просто и, как мне кажется, понятно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
STRONGTEAM Ярославль
от 250 000 до 350 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽