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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запутался с этими окнами  (Прочитано 4597 раз)
CJ1
Гость
« : Июнь 04, 2012, 08:03 »

Вобщем, задача такова,
Короче, сервак я уже написал

Проблема с клиентам.
В клиенте логика такая, включаем прогу, вылазиет диалоговое окно ввода логина и пароля, ввожу, если верно, то входу в главное окно, если не верно, то не вхожу в главное окно, а остаюсь в диалоговом.

Тут все у меня работает.

Теперь о проблеме.

Если я в диалоговом окне нажимаю кнопку закрыть, то мне нужно чтобы главное окно закрылось тоже и программа завершилась, понимаете Улыбающийся .

Но я не могу понять как это сделать, на WinAPI тут проблем вообще не возникает, я бы просто сделал CloseWindow(HWND)

А тут хрен пойми!!! Вобщем ща объясню код, самый логический вариант который я придумал.

Вот конструктор главного окна....
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
......................
//Тут я создаю вот это диалоговое окошко!
   d = new Dialog (_sok);
   d->exec();

//Теперь, когда я нажал на красный крестик закрыть, то мне нужно отловить это события и занести флаг, я не пойму как это организовать.
//затем я не пойму как прям из конструктора закрыть главное окно?????????????????????????????????
......................

}

Нужно сделать 2 вещи, отловить события, нажатия на красный крестик диалога, и прям в конструкторе главного окна закрыть главное окно
Записан
maint
Гость
« Ответ #1 : Июнь 04, 2012, 08:40 »

делаю где то так
Код:
    retcode = pw->exec();
    if(retcode == 0){
        exit(1);
    }
на кнопку Ok у меня назначен accept
Записан
CJ1
Гость
« Ответ #2 : Июнь 04, 2012, 08:44 »

Ясно, сделал чуть чуть по другому, но номально
Записан
CJ1
Гость
« Ответ #3 : Июнь 04, 2012, 08:51 »

В Qt некоторые вещи не продуманны.... Но зато намного больше приимуществ
Записан
sudo
Гость
« Ответ #4 : Июнь 04, 2012, 10:06 »

Код
C++ (Qt)
if (dialog->exec() != QDialog::Accepted)
 QApplication::quit();
 

Это не вещи не продуманы, а просто нужно уметь готовить
Записан
CJ1
Гость
« Ответ #5 : Июнь 04, 2012, 10:12 »

Ясно!
Записан
CJ1
Гость
« Ответ #6 : Июнь 04, 2012, 10:15 »

И дополнительно, тоже не понял... Где слот закрытия окна, тоесть произошел щелчек на крестике окна, произошло события, и там идет проверка, если чтото true то окно закрывается, если false то не закрывается?
Записан
Serr500
Гость
« Ответ #7 : Июнь 04, 2012, 10:19 »

Слота нет. Есть событие closeEvent, которое можно переопределить в своём диалоге. Там можно указать, закрывать окно или нет.
Записан
sudo
Гость
« Ответ #8 : Июнь 04, 2012, 10:21 »

И дополнительно, тоже не понял... Где слот закрытия окна, тоесть произошел щелчек на крестике окна, произошло события, и там идет проверка, если чтото true то окно закрывается, если false то не закрывается?

На крестик и Отмену в конечном итоге вызывается reject(), закрывающий окно диалога с кодом QDialog::Rejected, на Ок подвешен accept(). Это в случае с QDialogButtonBox. Если использовать свои кнопки, всё это нужно коннектить руками/в ui, кроме крестика, который будет продолжать закрывать диалог. Для переопределения крестика уже нужно перегружать closeEvent()
Записан
CJ1
Гость
« Ответ #9 : Июнь 04, 2012, 10:23 »

Понятно.
« Последнее редактирование: Июнь 04, 2012, 10:26 от CJ1 » Записан
sudo
Гость
« Ответ #10 : Июнь 04, 2012, 10:27 »

Понятно.
А как отменить закрытия? Не дать окну закрыться?

Перегрузить closeEvent(), проверить там условия и, если условия не позволяют закрыть окно, вызвать ignore для события, пришедшего в closeEvent(). Если диалог стандартный типа messageBoxа какого-нибудь, можно подвесить в вызывающем коде на диалог eventHandler

Код
C++ (Qt)
obj->installEventHandler(handlerObj);
 

а в отлавливающем объекте перегрузить метод QObject::eventFilter
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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