Сведения о вопросе

HEIGTH

02:19, 19th August, 2020

Теги

Qt   C++    

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

Просмотров: 354   Ответов: 4

Я только изучаю qt и надумал написать программу, окно которой перерисовывается после нажатия кнопки, как например при установки программы, но при этом мне надо что бы была некая цикличность переходов и как я понял этот класс мне подходит, только в учебниках он практически не рассматривается.



  Сведения об ответе

+-*/

18:16, 15th August, 2020

Хорошо, выложу вам кусок своего кода, опять же, это не полностью вся программа, а именно тот кусок где я использую 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. Пример я изменил для простоты, в реале все мои виджеты наследуются от одного абстрактного класса, в который вынесены общие методы, в итоге код становился меньше и читабельней.


  Сведения об ответе

FAriza

12:17, 23rd August, 2020

а что там рассматривать? Берем виджет на котором будем манипулировать, и в его конструкторе прописываем следующее:
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 это номер вашего виджета.


  Сведения об ответе

baggs

06:57, 8th August, 2020

Писал на конференции по Maemo в Москве программульку, код здесь. Там есть QStackedWidget, мб подойдет.


  Сведения об ответе

lesha

21:10, 10th August, 2020

Мой проект: code.google.com/p/qcheckersmobile/
Там основное окно его использует. Просто и, как мне кажется, понятно.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться