Russian Qt Forum
Март 15, 2010, 11:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]
  Печать  
Автор Тема: QWizard передать объект  (Прочитано 216 раз)
0xFF
Новичок

Offline Offline

Сообщений: 4


Просмотр профиля
« : Февраль 08, 2010, 12:29 »

Доброго времени суток, такой вопрос - есть Wizard примерно такого типа
Код:
class MyWizard : public QWizard
{
...
};

class A: public QWizardPage
{
...
};

class B: public QWizardPage
{
...
private:
    QString text;
};

class C: public QWizardPage
{
...
};
Код:
MyWizard::MyWizard(QWidget *parent)
    : QWizard(parent)
{
    setPage(0, new A);
    setPage(1, new B);
    setPage(2, new C);
    setStartId(0);

    ...
}

В классе B есть переменная QString, мне нужно чтобы она была доступна на следующей странице визарда. Есть варианты как это сделать не делая ее глобальной и не делая наследование между B и С?
Записан
SpiritFire
Новичок

Offline Offline

Сообщений: 38


Просмотр профиля
« Ответ #1 : Февраль 08, 2010, 12:36 »

А чем не утраивает простейшее решение?

Код:
class B: public QWizardPage
{
public:
    QString text();
    void    setText(const QString& newText);
private:
    QString m_text;
};

Записан
0xFF
Новичок

Offline Offline

Сообщений: 4


Просмотр профиля
« Ответ #2 : Февраль 08, 2010, 12:57 »

Не понял как мн это поможет. Мне нужно значение QString text в классе С.
Записан
Kolobok
Чайник
*
Offline Offline

Сообщений: 99


Просмотр профиля
« Ответ #3 : Февраль 08, 2010, 13:22 »

Класс MyWizard хранит все три объекта A, B и C и соответственно может передавать информацию от одного другому. При наличии функций доступа, как тебе уже сказали.
Записан
SpiritFire
Новичок

Offline Offline

Сообщений: 38


Просмотр профиля
« Ответ #4 : Февраль 08, 2010, 13:25 »

Не понял как мн это поможет. Мне нужно значение QString text в классе С.
Ну так а что мешает в классе С (или D, или E) сделать так:
Код:
QString blabla = bPage->text();
Религия? Улыбающийся
Записан
mixrutka
Новичок

Offline Offline

Сообщений: 1


Просмотр профиля
« Ответ #5 : Февраль 17, 2010, 23:18 »

У объекта QWizard есть замечательная функция.

Код:
void QWizardPage::registerField ( const QString & name, QWidget * widget, const char * property = 0, const char * changedSignal = 0 )   [protected]
Creates a field called name associated with the given property of the given widget. From then on, that property becomes accessible using field() and setField().

Fields are global to the entire wizard and make it easy for any single page to access information stored by another page, without having to put all the logic in QWizard or having the pages know explicitly about each other.

Затем можно обращаться к любому полю через
QVariant QWizard::field ( const QString & name ) const
или
QVariant QWizardPage::field ( const QString & name ) const
« Последнее редактирование: Февраль 17, 2010, 23:21 от mixrutka » Записан
Страниц: [1]
  Печать  
 
Перейти в:  

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