На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
Страницы: (6) « Первая ... 4 5 [6]  все  ( Перейти к последнему сообщению )  
> QDialog
    zss
    что мешает добавить слоты аналогичные invokeStart() - для разных методов?

    для возвращаемых значений различных типов можно использовать сигналы вида:

    void methodFinished(int)const;
    void methodFinished(QString)const;
    void methodFinished(double)const;
      В общем забросил я в свое время проект, но тут опять возвращаюсь к нему.
      Еще раз перечитал все сообщения.

      1.
      gryz, если честно - не совсем понял код и как он работает :) и что есть moveToThread... ?

      2. Flex Ferrum, ну вроде все понял, кроде некоторых моментов. Например
      Цитата Flex Ferrum @
      Не. Лучше не так, а вот так:

      class WorkerThread : public QThread
      {
      public:
      WorkerThread(boost::function<void ()> worker, boost::function<void (const std::exception&)> xHandler) : m_Worker(worker), m_ExHandler(handler) {;}
      int run()
      {
      try
      {
      m_Worker();
      }
      catch (const std::exception& ex)
      {
      m_ExHandler(ex);
      }
      }
      };


      как сбиндить метод.
      Если просто метод класса, то
      ExpandedWrap disabled
        boost::bind (&Class::function, this)


      а как сбиндить для WorkerThread
      ExpandedWrap disabled
        void func (const std::exception& ex);


      P.S. Попробовал данный способ
      Цитата Flex Ferrum @
      QWaitDialog dialog;
      QConnectThread thread(); // тут сам придумаешь, что написать.
      connect(&thread, SIGNAL(ThreadEnd(int)), &dialog, SLOT(ThreadEnded(int)));
      connect(&thread, SIGNAL(ThreadError(const QString&)), &dialog, SLOT(ThreadError(const QString&)));
      thread.start();
      dialog.exec();


      поток запускается, диалог отображается, после завершения потока окно закрывается (дергается слот диалого)
      Но !!! Таймер внутри диалога не отрабатывает. Почему ? Ведь диалог отрисовывается. Его можно даже перемещать
        Совсем не помню, чего там писал :)
        Почитаю...

        moveToThread - переносит объект (QObject) из данного потока в какой-то другой.
        Каждый Qt object "живет" в каком-то потоке.
        Это означает, что обработка вызова его слотов будет происходит в этом потоке.

        zss

        а ты пробовал его запускать? :)
        Сообщение отредактировано: gryz -
          zss

          Так что непонятно-то? :)

          Экземпляр класса Client - это объект, методы которого нам надо исполнить.
          В примере его метод start() выполняет какие-то вычисления.
          Объект должен "жить" в не GUI потоке.

          DummyMainWindow - класс, который осуществляет взаимодействие с пользователем.
          В его конструкторе запускается параллельный "вычисляющий" поток.
          Создается "вычисляющий" объект. Перемещается в вычисляющий поток.

          Далее, при помощи сигнала кнопки clicked() вызываем слот "вычисляющего" объекта invokeStart().

          Обратная связь с GUI-потоком реализуется при помощи сигналов methodStarted() и methodFinished().

          Все сигнал-слот соединения имеют тип Qt::QueuedConnection. Т.е. вызовы слотов происходят асинхронно.
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0260 ]   [ 15 queries used ]   [ Generated: 19.05.24, 13:17 GMT ]