Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: 0xFF от Февраль 08, 2010, 12:29



Название: QWizard передать объект
Отправлено: 0xFF от Февраль 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 и С?


Название: Re: QWizard передать объект
Отправлено: SpiritFire от Февраль 08, 2010, 12:36
А чем не утраивает простейшее решение?

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



Название: Re: QWizard передать объект
Отправлено: 0xFF от Февраль 08, 2010, 12:57
Не понял как мн это поможет. Мне нужно значение QString text в классе С.


Название: Re: QWizard передать объект
Отправлено: Kolobok от Февраль 08, 2010, 13:22
Класс MyWizard хранит все три объекта A, B и C и соответственно может передавать информацию от одного другому. При наличии функций доступа, как тебе уже сказали.


Название: Re: QWizard передать объект
Отправлено: SpiritFire от Февраль 08, 2010, 13:25
Не понял как мн это поможет. Мне нужно значение QString text в классе С.
Ну так а что мешает в классе С (или D, или E) сделать так:
Код:
QString blabla = bPage->text(); 
Религия? :)


Название: Re: QWizard передать объект
Отправлено: mixrutka от Февраль 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