Russian Qt Forum

Qt => Вопросы новичков => Тема начата: nachinaushij от Март 23, 2012, 14:47



Название: Два взаимозамещающих QDialog-а
Отправлено: nachinaushij от Март 23, 2012, 14:47
Здравствуйте уважаемые!
Подскажите плиз, как организовать следующую затею. В дизайнере создано два диалога, по одному они запускаются, как с добрым утром, стандартно:
Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog1 w; //Ну и если подставить Dialog2, то открывается второй
    w.show();
    return a.exec();
}

Мне необходимо сделать, чтобы при нажатии кнопки "Диалог№2" в первом диалоге, он полностью закрывался, а вместо него открывался второй. И во втором такая же система, при нажатии кнопки "Диалог№1", чтобы открывался первый, а второй уничтожался.


Название: Re: Два взаимозамещающих QDialog-а
Отправлено: Kurles от Март 23, 2012, 15:10
В первой диалоге по  нажатию кнопки создаешь экземпляр второго диалога, показываешь окно и закрываешь текущее окно, примерно так:
Код
C++ (Qt)
   Dialog2 *dlg  = new Dialog2;
   dlg->show();
   accept();
Во втором диалоге поступаешь аналогично. При создании обоих диалогов вызываешь в конструкторе
Код
C++ (Qt)
   setAttribute(Qt::WA_DeleteOnClose, true);


Название: Re: Два взаимозамещающих QDialog-а
Отправлено: nachinaushij от Март 23, 2012, 16:14
Не получается. Что-то я не так делаю. Ткните носом, плиз. Проект. (http://rghost.ru/37178641).


Название: Re: Два взаимозамещающих QDialog-а
Отправлено: nachinaushij от Март 23, 2012, 20:38
Победил. Суть такая, кнопку на втором диалоге надо соединить со слотом accept, тогда можно ловить возвращаемое значение после закрытия второго диалога, без изобретения дополнительных велосипедов.
Код
C++ (Qt)
Dialog2::Dialog2(QWidget *parent) :
   QDialog(parent),
   ui(new Ui::Dialog2)
{
   ui->setupUi(this);
   connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(accept())); // <<<=============
}

Затем в слоте нажатия кнопки на первом диалоге делаем так:
Код
C++ (Qt)
void Dialog1::on_pushButton_clicked()
{
   Dialog2 *dlg2  = new Dialog2(this);
   hide();
   int ret = dlg2->exec();
   delete dlg2;
   if (ret == 1) show(); else close();
}

При нажатии кнопки во втором диалоге, просто его закрываем:

Код
C++ (Qt)
void Dialog2::on_pushButton_clicked()
{
   close();
}