Russian Qt Forum
Ноябрь 26, 2024, 19:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QStackedWidget  (Прочитано 13211 раз)
arttry
Гость
« : Декабрь 05, 2013, 12:30 »

Добрый день!

Не могу найти достойных примеров использования QStackedWidget. Подскажите как изменять страницы QStackedWidget.

Код:
#include "widget.h"
#include "ui_widget.h"

#include <QStackedWidget>
#include <QVBoxLayout>
#include <QComboBox>

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{

    QWidget *firstPageWidget = new QWidget;
    QWidget *secondPageWidget = new QWidget;
    QWidget *thirdPageWidget = new QWidget;


    QStackedWidget *stackedWidget = new QStackedWidget();
    stackedWidget->addWidget(firstPageWidget);
    stackedWidget->addWidget(secondPageWidget);
    stackedWidget->addWidget(thirdPageWidget);

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(stackedWidget);
    setLayout(layout);

    ui->setupUi(this);
}


void Widget::click()
{

   // ???
}

Widget::~Widget()
{
    delete ui;
}
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Декабрь 05, 2013, 13:37 »

void setCurrentIndex(int index)
void setCurrentWidget(QWidget * widget)
Записан
arttry
Гость
« Ответ #2 : Декабрь 05, 2013, 14:16 »

Я новичок в Qt и С++ только изучаю.
Пробовал писать в обработчике
Код:
stackedWidget->setCurrentIndex(2);
Но должного результата не возымело
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Декабрь 05, 2013, 14:21 »

Но должного результата не возымело
А как вы это определяете? У вас все виджеты-страницы одинаковые.
Скорее всего вы просто не увидели разницу.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Декабрь 05, 2013, 14:22 »

слот click() надо еще соединить с каким-то сигналом (кнопки например, если она есть)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
arttry
Гость
« Ответ #5 : Декабрь 05, 2013, 14:48 »

Цитировать
слот click() надо еще соединить с каким-то сигналом (кнопки например, если она есть)
соединил с PushButton.
Цитировать
А как вы это определяете? У вас все виджеты-страницы одинаковые.
А как их нужно определять?
Записан
once_again_abc
Гость
« Ответ #6 : Декабрь 08, 2013, 08:53 »

Цитировать
слот click() надо еще соединить с каким-то сигналом (кнопки например, если она есть)
соединил с PushButton.
Цитировать
А как вы это определяете? У вас все виджеты-страницы одинаковые.
А как их нужно определять?

Что значит "изменять страницы QStackedWidget"? Вы хотите переключаться между виджетами?
Если да, то как вам уже тут сказали - вы не увидите разницу т.к. все три виждета ввашем стеке визуально одинаковы. Чтобы поиграть с ними создайте QLabel с различным текстом на каждом из виджетов.
Записан
arttry
Гость
« Ответ #7 : Декабрь 09, 2013, 09:44 »

Хочу переключаться между виджетами.
Накидал на страницы QStackedWidget различные формы. Так что визуально разницу увижу.
Записан
arttry
Гость
« Ответ #8 : Декабрь 09, 2013, 15:20 »

Не уж то некому скинуть пример работы QStackedWidget?  Непонимающий Реально не понятно как использовать..
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #9 : Декабрь 09, 2013, 16:49 »

Не уж то некому скинуть пример работы QStackedWidget?  Непонимающий Реально не понятно как использовать..

Код
C++ (Qt)
class QSW : public QStackedWidget
{
public:
   QSW(QWidget *parent = 0) : QStackedWidget(parent)
   {
       addWidget(new QLabel("Page 1", this));
       addWidget(new QLabel("Page 2", this));
       addWidget(new QLabel("Page 3", this));
 
       setCurrentIndex(1);
   }
};
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   QSW *qsw = new QSW;
   qsw->show();
 
   return app.exec();
}
 

« Последнее редактирование: Декабрь 09, 2013, 16:51 от Alex Custov » Записан
arttry
Гость
« Ответ #10 : Декабрь 09, 2013, 17:10 »

Видимо я неправильно вопрос формулирую. Кинул в дизайнере QStackedWidget, создал несколько страниц для примера, на каждую из них накидал контролы.
Везде много примеров с использованием QStackedWidget вместе с QListWidget. Оно и понятно как делать.
А мне нужно на странице 1 - форма с кнопкой, при клике на которую появляется страница 2 и так далее. Можно ли такое осуществить, предварительно создав страницы в дизайнере, либо же нужно это делать программно - addWidget и т.д.?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #11 : Декабрь 09, 2013, 17:29 »

А мне нужно на странице 1 - форма с кнопкой, при клике на которую появляется страница 2 и так далее.

Соединяешь сигнал кнопки clicked() со своим слотом, внутри слота делаешь stackedWidget->setCurrentIndex(). Ты уже нечто подобное сделал, если это не работает, то ошибка у тебя в коде.

Это поведение к слову похоже на QWizard.

Можно ли такое осуществить, предварительно создав страницы в дизайнере, либо же нужно это делать программно - addWidget и т.д.?

Разницы между этими методами нет никакой, в дизайнере это объективно быстрее.

P.S. И совет - забудь о Qt пока не будешь чувствовать себя уверенно в С++
« Последнее редактирование: Декабрь 09, 2013, 17:31 от Alex Custov » Записан
arttry
Гость
« Ответ #12 : Декабрь 09, 2013, 17:36 »

Спасибо за советы! Попробую)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.143 секунд. Запросов: 23.