Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: jatsuk от Января 31, 2012, 09:33



Название: Не закрывается форма
Отправлено: jatsuk от Января 31, 2012, 09:33
Есть две формы - основная (MainWindow) и форма проверки (Dialog)

В основной вызывается форма проверки
Dialog form;
form.exec();

В Dialog есть кнопка по которой происходит блалалалала и в конце Dialog::close(); - должна закрыться .

Если запустить программу, то из главной формы сразу вызывается Dialog. Там В РУЧНУЮ нажимаю на кнопку, .....Dialog::close();  - нормально закрылась Dialog и снова появилась MainWindow.

Но нужно чтобы кнопка нажималась сама. Сделал в начале  Dialog вызов слота с этой кнопкой   activon2();. Вроде должно произойти тоже самое.... но не закрывается форма Dialog, но если после этого нажать вручную, то норм !

Запускал через отладку - в слот заходит, всё выполняет, а на Dialog::close(); не обращает внимания... как будто его нет.

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


Название: Re: Не закрывается форма
Отправлено: Пантер от Января 31, 2012, 09:39
Цитировать
Сделал в начале  Dialog вызов слота с этой кнопкой   activon2();.
Это где?


Название: Re: Не закрывается форма
Отправлено: jatsuk от Января 31, 2012, 09:41
Код:
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    m_ui(new Ui::Dialog)
{
    m_ui->setupUi(this);
........

 if (povt) { // в условие заходит и слот вызывает
......
       activon2();
 }
}

void Dialog::activon2()
{
.........
 Dialog::close();
}


Название: Re: Не закрывается форма
Отправлено: Пантер от Января 31, 2012, 09:44
Нельзя в конструкторе. Сделай через QTimer::singleShot.


Название: Re: Не закрывается форма
Отправлено: jatsuk от Января 31, 2012, 09:45
Нельзя в конструкторе. Сделай через QTimer::singleShot.
Что нельзя ?


Название: Re: Не закрывается форма
Отправлено: Пантер от Января 31, 2012, 09:47
Нельзя в конструкторе. Сделай через QTimer::singleShot.
Что нельзя ?
Не получится в конструкторе закрыть диалог.


Название: Re: Не закрывается форма
Отправлено: jatsuk от Января 31, 2012, 09:51
Спасибо большое, помогло  ;D а я сомневался  в QTimer

Всё работает

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(activon2()));
 timer->start(1000);


Название: Re: Не закрывается форма
Отправлено: Пантер от Января 31, 2012, 09:52
Зачем?
Код
C++ (Qt)
QTimer::singleShot (0, this, SLOT (close ());
 


Название: Re: Не закрывается форма
Отправлено: jatsuk от Января 31, 2012, 09:57
Сделал так...
 QTimer::singleShot (0, this, SLOT (activon2()));

а в чем разница то ?)


Название: Re: Не закрывается форма
Отправлено: Пантер от Января 31, 2012, 09:59
1. Одна строчка вместо трех.
2. Нет необходимости создавать объект.


Название: Re: Не закрывается форма
Отправлено: jatsuk от Января 31, 2012, 10:01
Спасибо.
QTimer::singleShot (1000, this, SLOT (activon2()));
поставил задержку 1000 милисекунд, т.к. окно при нуле промелькивает быстро и некрасиво  :)