crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Проблема с exec()
OLAND
  опции профиля:
сообщение 9.11.2010, 22:23
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 25.3.2010
Пользователь №: 1564

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




Репутация:   0  


Проблема такого рода

class1::update()
{
emit question();
func1();
func2();
}

void class2::questionInOtherClass()  ((slot))
{
QMessageBox msg("what the hell?");
msg.exec();
}



так вот update() например работает по таймеру положим.

а exec() тормозит выполнение Всего приложения ждет от exec.

незнаю как обычно это решается. я придумал сделать поток и типа читать статусы например того класса class2 и обрабатывать так.

Как можно сделать элегантно.
Причина редактирования: используй тэг - code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.11.2010, 22:55
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


можно не вызывать exec(), сделать диалог модальным и вызвать show(). Но чтобы функция не завершилась, сделать цикл, в котором проверять статус окна сообщения и ещё вызывать обработку событий (processEvents())
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
OLAND
  опции профиля:
сообщение 9.11.2010, 23:39
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 25.3.2010
Пользователь №: 1564

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




Репутация:   0  


Ну это понятно но для этого придется мне делать аля MessageBox. я об этом думал но получается что в одной части для программы я использую МессаджБокс а в другой части некую подобную хрень .
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.11.2010, 0:33
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


попробуй такой вариант:
void class2::questionInOtherClass()  ((slot))
{
QMessageBox *message = new QMessageBox("what the hell?");
message->setWindowModality(Qt::WindowModal);
connect(message, SIGNAL(buttonClicked(QAbstractButton *button)),
this, SLOT(messageClicked(QAbstractButton *button)));
message->show();
}

void class2::messageClicked(QAbstractButton *button)
{
// некая полезная работа

sender()->deleteLeter();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 20.4.2024, 13:30