Russian Qt Forum
Апреля 30, 2025, 17:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

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

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Января 31, 2012, 09:39 »

Цитировать
Сделал в начале  Dialog вызов слота с этой кнопкой   activon2();.
Это где?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
jatsuk
Гость
« Ответ #2 : Января 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();
}
« Последнее редактирование: Января 31, 2012, 09:44 от Пантер » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Января 31, 2012, 09:44 »

Нельзя в конструкторе. Сделай через QTimer::singleShot.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
jatsuk
Гость
« Ответ #4 : Января 31, 2012, 09:45 »

Нельзя в конструкторе. Сделай через QTimer::singleShot.
Что нельзя ?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Января 31, 2012, 09:47 »

Нельзя в конструкторе. Сделай через QTimer::singleShot.
Что нельзя ?
Не получится в конструкторе закрыть диалог.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
jatsuk
Гость
« Ответ #6 : Января 31, 2012, 09:51 »

Спасибо большое, помогло  Смеющийся а я сомневался  в QTimer

Всё работает

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(activon2()));
 timer->start(1000);
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Января 31, 2012, 09:52 »

Зачем?
Код
C++ (Qt)
QTimer::singleShot (0, this, SLOT (close ());
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
jatsuk
Гость
« Ответ #8 : Января 31, 2012, 09:57 »

Сделал так...
 QTimer::singleShot (0, this, SLOT (activon2()));

а в чем разница то ?)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Января 31, 2012, 09:59 »

1. Одна строчка вместо трех.
2. Нет необходимости создавать объект.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
jatsuk
Гость
« Ответ #10 : Января 31, 2012, 10:01 »

Спасибо.
QTimer::singleShot (1000, this, SLOT (activon2()));
поставил задержку 1000 милисекунд, т.к. окно при нуле промелькивает быстро и некрасиво  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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