Russian Qt Forum

Qt => Вопросы новичков => Тема начата: arttry от Декабрь 05, 2013, 12:30



Название: QStackedWidget
Отправлено: 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;
}


Название: Re: QStackedWidget
Отправлено: Old от Декабрь 05, 2013, 13:37
void setCurrentIndex(int index)
void setCurrentWidget(QWidget * widget)


Название: Re: QStackedWidget
Отправлено: arttry от Декабрь 05, 2013, 14:16
Я новичок в Qt и С++ только изучаю.
Пробовал писать в обработчике
Код:
stackedWidget->setCurrentIndex(2);
Но должного результата не возымело


Название: Re: QStackedWidget
Отправлено: Old от Декабрь 05, 2013, 14:21
Но должного результата не возымело
А как вы это определяете? У вас все виджеты-страницы одинаковые.
Скорее всего вы просто не увидели разницу.


Название: Re: QStackedWidget
Отправлено: kambala от Декабрь 05, 2013, 14:22
слот click() надо еще соединить с каким-то сигналом (кнопки например, если она есть)


Название: Re: QStackedWidget
Отправлено: arttry от Декабрь 05, 2013, 14:48
Цитировать
слот click() надо еще соединить с каким-то сигналом (кнопки например, если она есть)
соединил с PushButton.
Цитировать
А как вы это определяете? У вас все виджеты-страницы одинаковые.
А как их нужно определять?


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

Что значит "изменять страницы QStackedWidget"? Вы хотите переключаться между виджетами?
Если да, то как вам уже тут сказали - вы не увидите разницу т.к. все три виждета ввашем стеке визуально одинаковы. Чтобы поиграть с ними создайте QLabel с различным текстом на каждом из виджетов.


Название: Re: QStackedWidget
Отправлено: arttry от Декабрь 09, 2013, 09:44
Хочу переключаться между виджетами.
Накидал на страницы QStackedWidget различные формы. Так что визуально разницу увижу.


Название: Re: QStackedWidget
Отправлено: arttry от Декабрь 09, 2013, 15:20
Не уж то некому скинуть пример работы QStackedWidget?  ??? Реально не понятно как использовать..


Название: Re: QStackedWidget
Отправлено: Alex Custov от Декабрь 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();
}
 



Название: Re: QStackedWidget
Отправлено: arttry от Декабрь 09, 2013, 17:10
Видимо я неправильно вопрос формулирую. Кинул в дизайнере QStackedWidget, создал несколько страниц для примера, на каждую из них накидал контролы.
Везде много примеров с использованием QStackedWidget вместе с QListWidget. Оно и понятно как делать.
А мне нужно на странице 1 - форма с кнопкой, при клике на которую появляется страница 2 и так далее. Можно ли такое осуществить, предварительно создав страницы в дизайнере, либо же нужно это делать программно - addWidget и т.д.?


Название: Re: QStackedWidget
Отправлено: Alex Custov от Декабрь 09, 2013, 17:29
А мне нужно на странице 1 - форма с кнопкой, при клике на которую появляется страница 2 и так далее.

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

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

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

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

P.S. И совет - забудь о Qt пока не будешь чувствовать себя уверенно в С++


Название: Re: QStackedWidget
Отправлено: arttry от Декабрь 09, 2013, 17:36
Спасибо за советы! Попробую)