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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Возврат данных из Диалога  (Прочитано 4973 раз)
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 диалога?
Записан
Kolobok
Гость
« Ответ #1 : Ноябрь 11, 2009, 23:58 »

Код:
dlg->exec();
Записан
Vlad
Гость
« Ответ #2 : Ноябрь 12, 2009, 01:55 »

Код:
dlg->exec();

это немного не то, exec возвращает DialogCode - Accepted, Rejected. А мне надо вернуть свои данные обработанные этим диалогом %)
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Ноябрь 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();
       // ...
   }
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноябрь 12, 2009, 12:41 »

Проще говоря, после выполнения exec сам диалог еще жив (просто hidden) и из него можно брать все что надо
Записан
Павел_F.
Гость
« Ответ #5 : Ноябрь 12, 2009, 15:44 »

именно так. можно даже ехес не переписывать
Код:
MyDialog* dlg;
dlg = new MyDialog();
if( dlg->exec() == QDialog::Accepted) dlg->saveData();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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