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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QWizard, "работающая" QWizardPage  (Прочитано 8682 раз)
0xFF
Гость
« : Март 14, 2010, 13:12 »

Как сделать, чтобы при переходе на следующую QWizardPage, на ней работал QProgressBar.
Пытался описать изменения QProgressBar в initializePage(). Не выходит. Небольшая пауза и появляется QProgressBar в конечном состоянии.
Записан
alexman
Гость
« Ответ #1 : Март 14, 2010, 21:54 »

Код можно?
Записан
0xFF
Гость
« Ответ #2 : Март 15, 2010, 11:17 »

.h
Код:
class WIZARD : public QWizard
{
    Q_OBJECT

public:
    WIZARD(QWidget *parent = 0);
};

class One : public QWizardPage
{
    Q_OBJECT
public:
    One(QWidget *parent = 0);
    int nextId() const;
};

class Two : public QWizardPage
{
    Q_OBJECT
public:
    Two(QWidget *parent = 0);
    int nextId() const;
    void initializePage();

private:
    void test();
    QProgressBar *progBar;
};

class Three : public QWizardPage
{
    Q_OBJECT
public:
    Three(QWidget *parent = 0);
};

.cpp
Код:
WIZARD::WIZARD(QWidget *parent)
    : QWizard(parent)
{
    setPage(0, new One);
    setPage(1, new Two);
    setPage(2, new Three);

    setStartId(0);
}

One::One(QWidget *parent)
    : QWizardPage(parent)
{}

int One::nextId() const
{
    return 1;
}

Two::Two(QWidget *parent)
    : QWizardPage(parent)
{
    progBar = new QProgressBar;
    progBar->setMaximum(3);

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

void Two::initializePage() {
    test();
}

void Two::test() {
    QTest::qWait(500);
    progBar->setValue(1);
    QTest::qWait(500);
    progBar->setValue(2);
    QTest::qWait(500);
    progBar->setValue(3);
}

int Two::nextId() const
{
    return 2;
}

Three::Three(QWidget *parent)
    : QWizardPage(parent)
{}

Собственно хотелось бы при загрузке страницы Two наблюдать изменения QProgressBar'а
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Март 15, 2010, 11:40 »

Замените
Код
C++ (Qt)
void Two::initializePage() {
   test();
}
 
на
Код
C++ (Qt)
void Two::setVisible( bool set ) {
   QWizardPage::setVisible( set );
   if( set )
     test();
}
 
« Последнее редактирование: Март 15, 2010, 11:43 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
alexman
Гость
« Ответ #4 : Март 15, 2010, 11:50 »

В initializePage необходимо лишь проинициализировать страницу!
Если Вы хотите замутить прогресс, нужно сделать отдельный поток, который будит emit сигналы о прогрессе. Поток можно запустить по currentIdChanged( int ).
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Март 15, 2010, 11:52 »

Цитировать
Это не работает!
Хм, объясните почему?

Цитировать
... нужно сделать отдельный поток ...
И зачем так всё усложнять?
Записан

Qt 5.11/4.8.7 (X11/Win)
alexman
Гость
« Ответ #6 : Март 15, 2010, 11:59 »

Цитировать
Это не работает!
Хм, объясните почему?
Сорри! Я уже коммент удалил!
Записан
alexman
Гость
« Ответ #7 : Март 15, 2010, 12:01 »

Цитировать
... нужно сделать отдельный поток ...
И зачем так всё усложнять?
В данном случае действительно нет смысла усложнять...на самом деле я общую схему описал Подмигивающий
Записан
0xFF
Гость
« Ответ #8 : Март 15, 2010, 13:14 »

Код
C++ (Qt)
void Two::setVisible( bool set ) {
   QWizardPage::setVisible( set );
   if( set )
       test();
}
 
Что-то не работает, эффект тот же (
Получается после setVisible вызывается что-то еще?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Март 15, 2010, 14:00 »

Хм, странно...

Тогда в конструктор WIZARD-а добавь

connect( this, SIGNAL( currentIdChanged( int ) ), SLOT( showPage( int ) ) );

и в нём же пропиши слот

Код
C++ (Qt)
void WIZARD::showPage( int id )
{
   if( id == 1 )
   {
      Two* two = dynamic_cast< Two* >( page( id ) );
      two->test();
   }
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
0xFF
Гость
« Ответ #10 : Март 15, 2010, 14:18 »

Спасибо, работает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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