Re[11]: Создать окна в консольном приложении. Как?
От: SaZ  
Дата: 13.11.21 10:43
Оценка:
Здравствуйте, imh0, Вы писали:

I>...

I>
I>Application a(argc, argv);
I>a.exec();
I>


I>Честно? Твой ответ вообще не по теме. Мне надо после a.exec() работать, ты мне привел пример того что и так ясно... Но я уже сказал — извини, но таким тоном можешь разговаривать дома. А лучше и там не надо.


Что именно нужно делать "после"? С точки зрения Qt ничего "после" быть не может. Если надо "после" — то в отдельном потоке. А лучше — вот этот весь код с QApplication в отдельный поток. Но я об этом уже писал выше.


S>>Тебе надо Qt хоть немного понять, и чтобы вопрос нормально сформулировать и чтобы ответы понимать.

I>Ага еще раз спасибо )

Если хотите абстрактно от Qt — то вы должны понимать и уметь реализовывать в многопоточной среде такие паттерны как chain of responsibility и producer consumer. Иначе все объяснения бесполезны.
Ваша проблема — вы не можете понять где вам проинициализировать обработчик. Об этом я тоже выше писал — надо понимать что у вас за события. Без этого не получится предметного разговора.

P.S. ко всем участникам темы — давайте не переходить на личности и оскорбления, а то достану банхаммер.

Очень псевдокод:
class Handler : public QObject
{
  Q_OBJECT
public:
  // ...
  void on_my_event()
  {
    QTimer::singleShot(0, this, &Handler::show_gui);
  }

  void show_gui()
  {
    // Создаём окно. Это уже будет вызвано в Qt потоке
  }
}

int qt_thread(conditional_variable& cv, Handler *h)
{
  QApplication app;
  h = new Handler;
  h->setParent(&app);
  cv.wake_all();
  return app.exec();
}

void main_thread()
{
  conditional_variable& cv;
  Handler *h = nullptr;

  std::thread t{&qt_thread, cv, h};
  cv.wait();

  // Прилетает сигнал - дёргаем наш прокси
  h->on_my_event();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.