Ответы пользователя по тегу Qt
  • Пример Qt программы с использованием QStackedWidget?

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

    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 это номер вашего виджета.
    Ответ написан
    1 комментарий