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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Два взаимозамещающих QDialog-а  (Прочитано 2709 раз)
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", чтобы открывался первый, а второй уничтожался.
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Март 23, 2012, 15:10 »

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

Код
C++ (Qt)
while(!asleep()) sheep++;
nachinaushij
Гость
« Ответ #2 : Март 23, 2012, 16:14 »

Не получается. Что-то я не так делаю. Ткните носом, плиз. Проект..
Записан
nachinaushij
Гость
« Ответ #3 : Март 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();
}

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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