Russian Qt Forum

Qt => Вопросы новичков => Тема начата: CJ1 от Июнь 04, 2012, 08:03



Название: Запутался с этими окнами
Отправлено: 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 вещи, отловить события, нажатия на красный крестик диалога, и прям в конструкторе главного окна закрыть главное окно


Название: Re: Запутался с этими окнами
Отправлено: maint от Июнь 04, 2012, 08:40
делаю где то так
Код:
    retcode = pw->exec();
    if(retcode == 0){
        exit(1);
    }
на кнопку Ok у меня назначен accept


Название: Re: Запутался с этими окнами
Отправлено: CJ1 от Июнь 04, 2012, 08:44
Ясно, сделал чуть чуть по другому, но номально


Название: Re: Запутался с этими окнами
Отправлено: CJ1 от Июнь 04, 2012, 08:51
В Qt некоторые вещи не продуманны.... Но зато намного больше приимуществ


Название: Re: Запутался с этими окнами
Отправлено: sudo от Июнь 04, 2012, 10:06
Код
C++ (Qt)
if (dialog->exec() != QDialog::Accepted)
 QApplication::quit();
 

Это не вещи не продуманы, а просто нужно уметь готовить


Название: Re: Запутался с этими окнами
Отправлено: CJ1 от Июнь 04, 2012, 10:12
Ясно!


Название: Re: Запутался с этими окнами
Отправлено: CJ1 от Июнь 04, 2012, 10:15
И дополнительно, тоже не понял... Где слот закрытия окна, тоесть произошел щелчек на крестике окна, произошло события, и там идет проверка, если чтото true то окно закрывается, если false то не закрывается?


Название: Re: Запутался с этими окнами
Отправлено: Serr500 от Июнь 04, 2012, 10:19
Слота нет. Есть событие closeEvent, которое можно переопределить в своём диалоге. Там можно указать, закрывать окно или нет.


Название: Re: Запутался с этими окнами
Отправлено: sudo от Июнь 04, 2012, 10:21
И дополнительно, тоже не понял... Где слот закрытия окна, тоесть произошел щелчек на крестике окна, произошло события, и там идет проверка, если чтото true то окно закрывается, если false то не закрывается?

На крестик и Отмену в конечном итоге вызывается reject(), закрывающий окно диалога с кодом QDialog::Rejected, на Ок подвешен accept(). Это в случае с QDialogButtonBox. Если использовать свои кнопки, всё это нужно коннектить руками/в ui, кроме крестика, который будет продолжать закрывать диалог. Для переопределения крестика уже нужно перегружать closeEvent()


Название: Re: Запутался с этими окнами
Отправлено: CJ1 от Июнь 04, 2012, 10:23
Понятно.


Название: Re: Запутался с этими окнами
Отправлено: sudo от Июнь 04, 2012, 10:27
Понятно.
А как отменить закрытия? Не дать окну закрыться?

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

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

а в отлавливающем объекте перегрузить метод QObject::eventFilter