Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Vlad от Ноябрь 11, 2009, 23:44



Название: Возврат данных из Диалога
Отправлено: Vlad от Ноябрь 11, 2009, 23:44
Есть 2 диалога, один вызывается из другого.

класс 1 диалога:
---------------------------------------------
class GroupsDialog : public QDialog {
    Q_OBJECT
    Q_DISABLE_COPY(GroupsDialog)
public:
    explicit GroupsDialog(QWidget *parent = 0);
    virtual ~GroupsDialog();

protected:
    virtual void changeEvent(QEvent *e);

private:
    Ui::GroupsDialog *m_ui;

private slots:
    void on_PlusAct_pressed();
};

класс 2 диалога:
---------------------------------------------
class AddActDialog : public QDialog {
    Q_OBJECT
    Q_DISABLE_COPY(AddActDialog)

public:
    explicit AddActDialog(QWidget *parent = 0);
    virtual ~AddActDialog();

protected:
    virtual void changeEvent(QEvent *e);

private:
    Ui::AddActDialog *m_ui;

private slots:
    void on_buttonBox_accepted();
};
---------------------------------------------

создается 1 диалог:

....................

    GroupsDialog *dlg = new GroupsDialog(this);
    dlg->show();

....................


GroupsDialog::GroupsDialog(QWidget *parent) : QDialog(parent), m_ui(new Ui::GroupsDialog)
{
    m_ui->setupUi(this);

    //из него вызываем 2 диалог, из которого нужно возвратить результат

    AddActDialog *dlg = new AddActDialog(this);
    dlg->show();

}

Как мне вернуть результат из 2 диалога в первый, при закрытии 2 диалога?


Название: Re: Возврат данных из Диалога
Отправлено: Kolobok от Ноябрь 11, 2009, 23:58
Код:
dlg->exec();


Название: Re: Возврат данных из Диалога
Отправлено: Vlad от Ноябрь 12, 2009, 01:55
Код:
dlg->exec();

это немного не то, exec возвращает DialogCode - Accepted, Rejected. А мне надо вернуть свои данные обработанные этим диалогом %)


Название: Re: Возврат данных из Диалога
Отправлено: Alex Custov от Ноябрь 12, 2009, 02:05
Код:
dlg->exec();

это немного не то, exec возвращает DialogCode - Accepted, Rejected. А мне надо вернуть свои данные обработанные этим диалогом %)

Я перезаписываю exec(), плюс создаю дополнительный метод, который возвратит нужные мне данные:

Код
C++ (Qt)
int AddActDialog::exec()
{
   int code = QDialog::exec();
 
   saveData();
 
   return code;
}
 
Data AddActDialog::data() const
{
   return d->data;
}
 

использование соответственно

Код
C++ (Qt)
   AddActDialog dlg(this);
 
   if(dlg.exec() == QDialog::Accepted)
   {
       Data data = dlg.data();
       // ...
   }
 


Название: Re: Возврат данных из Диалога
Отправлено: Igors от Ноябрь 12, 2009, 12:41
Проще говоря, после выполнения exec сам диалог еще жив (просто hidden) и из него можно брать все что надо


Название: Re: Возврат данных из Диалога
Отправлено: Павел_F. от Ноябрь 12, 2009, 15:44
именно так. можно даже ехес не переписывать
Код:
MyDialog* dlg;
dlg = new MyDialog();
if( dlg->exec() == QDialog::Accepted) dlg->saveData();