crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QApplication::quit() не срабатывает?
LE0N
  опции профиля:
сообщение 12.3.2009, 21:03
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


В общем написал малюсенькую аппликуху. В которой имеется форма-матюкалка фатальных ошибок апликухи.
Которую показываю так
FatalMsg::display(QString &);

Хотелось бы, что бы после того, как отработает окно диалога (dlg->exec()) - т.е. закроется. Закрывалось всё приложение.
QApplication::quit() вообще ни чего не делает. (По крайней мере этого не видно)
QApplication::exit(-1) тоже.
QApplication a(argc, argv);
a.setQuitOnLastWindowClosed(true);
#######
#######
#В функции FatalMsg::display()
QApplication::closeAllWindows();

Просто закрывает все окна. А процесс так и остаётся висеть.....

Цитата(LE0N @ 12.3.2009, 20:00) *
В общем написал малюсенькую программку. В которой имеется форма-матюкалка фатальных ошибок апликухи.
Которую показываю так
FatalMsg::display(QString &);

Хотелось бы, что бы после того, как отработает окно диалога (dlg->exec()) - т.е. закроется. Закрывалось всё приложение.
QApplication::quit() вообще ни чего не делает. (По крайней мере этого не видно)
QApplication::exit(-1) тоже.
QApplication a(argc, argv);
a.setQuitOnLastWindowClosed(true);
#######
#######
#В функции FatalMsg::display()
QApplication::closeAllWindows();

Просто закрывает все окна. А процесс так и остаётся висеть.....



ВЦ. Где кнопка редактировать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 12.3.2009, 21:05
Сообщение #2


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

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Приведи побольше кода.
Цитата
ВЦ. Где кнопка редактировать?

После 20 постов появится.

Сообщение отредактировал panter_dsd - 12.3.2009, 21:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 12.3.2009, 21:11
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


main
Раскрывающийся текст
int
main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setQuitOnLastWindowClosed(1);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));
    Loader *w=new Loader();
    w->setWindowFlags(Qt::FramelessWindowHint);
    w->show();
    w->process();
    return a.exec();
}

Loader::process()
Раскрывающийся текст
void
Loader::process() {
    this->set_progress_text("Получаем настройки программы");
    QFile file(QApplication::applicationDirPath()+"/config/db.conf");
    if(!file.exists()) {
        FatalMsg::display("Не могу найти файл настроек БД");
    }
}

FatalMsg::display
Раскрывающийся текст
void
FatalMsg::display(const QString &str) {
    FatalMsg *win=new FatalMsg();
    win->ui.textBrowser->setText(tr(str.toAscii().data()));
    win->exec();
    delete win;
    qApp->quit();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 12.3.2009, 21:20
Сообщение #4


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

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Так w остается висеть...
Попробуй
Loader::process() {
    this->set_progress_text("Получаем настройки программы");
    QFile file(QApplication::applicationDirPath()+"/config/db.conf");
    if(!file.exists()) {
        FatalMsg::display("Не могу найти файл настроек БД");
    }
this->close();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 12.3.2009, 21:25
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Так в том то и дело, я хочу что бы СРАЗУ после FatalMsg::display, закрывалось всё приложение!
Может исключение какое выбрсить можно, аль ещё чего?
QApplication::closeAllWindows();
Как я уже и говорил, закрывает все окна, только в не зависимости от настройки setQuitOnLastWindowClosed(true), процесс остаётся висеть....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 12.3.2009, 21:36
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(LE0N @ 12.3.2009, 21:25) *
Так в том то и дело, я хочу что бы СРАЗУ после FatalMsg::display, закрывалось всё приложение!
Может исключение какое выбрсить можно, аль ещё чего?
QApplication::closeAllWindows();
Как я уже и говорил, закрывает все окна, только в не зависимости от настройки setQuitOnLastWindowClosed(true), процесс остаётся висеть....

Ты запускаешь process, еще до запуска цикла обработки событий (который запускается a.exec()), поэтому quit() и не отрабатывает, ему еще останавливать нечего. Есть жОсткий метод: добавь ::exit( 0 ) в функцию display (после qApp->quit() или вместо).
А по хорошему, вызывай display после запуска цикла событий.

Сообщение отредактировал BRE - 12.3.2009, 21:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 12.3.2009, 21:40
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Не помогло.
А как начать обработку ПОСЛЕ a.exec ?
К какому слоту прицепиться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 12.3.2009, 21:55
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(LE0N @ 12.3.2009, 21:40) *
Не помогло.

А у меня работает :) :
void MainWindow::display()
{
        QMessageBox::information( this, "Test", "Process..." );
        ::exit( 0 );
}


Цитата(LE0N @ 12.3.2009, 21:40) *
А как начать обработку ПОСЛЕ a.exec ?
К какому слоту прицепиться?

Я не знаю что ты хочешь сделать?
Если вся работа происходит в process, замени в main:
return a.exec();
на
return 0;

Или можно запускать process нажатием кнопки или по таймеру наконец.
Много есть разных вариантов. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 12.3.2009, 22:07
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Мне не нужно через задницу. Мне нужен толковый способ по запуску loader->process после a.exec без участия пользователя...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 12.3.2009, 22:12
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(LE0N @ 12.3.2009, 22:07) *
Мне не нужно через задницу. Мне нужен толковый способ по запуску loader->process после a.exec без участия пользователя...


Если вся работа выполняется в process() и после его завершения программа должна закрыться (я так понимаю твою задачу):
void Loader::process() {
    this->set_progress_text("Получаем настройки программы");
    QFile file(QApplication::applicationDirPath()+"/config/db.conf");
    if(!file.exists()) {
        FatalMsg::display("Не могу найти файл настроек БД");
        return;
    }

    // Дальнейшая работа
}


void
FatalMsg::display(const QString &str) {
    FatalMsg win;
    win.ui.textBrowser->setText(tr(str.toAscii().data()));
    win.exec();
}


int
main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));

    Loader *w=new Loader();
    w->setWindowFlags(Qt::FramelessWindowHint);
    w->show();
    w->process();

    return 0;
}


Сообщение отредактировал BRE - 12.3.2009, 22:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 21.4.2021, 19:15