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


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> Как создать static signal в QT
    Как создать static signal в QT? Проблема такая: в классе есть несколько статических CALLBACK функций, которые вызываются извне. Мне необходимо из этого класса послать signal (emit) информирующий о работе этих CALLBACK функций.
      GrinEd, если у Вас существует только один экземпляр данного класса, можно использовать Singleton.
        можно сделать по аналогии QApplication::Instance , тогда внутри калбека нужно дергать
        ExpandedWrap disabled
          MyCallback()
          {
          SomeClass::Instance()->NotifyMyCallback();
          }
           
          где
          SomeClass::NotifyMyCallback()
          {
          emit SomeSignal;
          }
          klep это что-то типа фабрики в java?
            GrinEd, это обычный Singleton. Фабрика это немного другое (хотя она обычно тоже через синглтон реализуется). В общем, как-то так (набросок):

            MyClass.h
            ExpandedWrap disabled
              class MyClass : public QObject
              {
              Q_OBJECT
              public:
                  virtual ~MyClass();
                  static MyClass* getInstance();
                  static void callback();
              signals:
                  void mysignal();
              protected:
                  MyClass();
              private:
                  void emitSignal();
                  static MyClass* m_instance;
              };


            MyClass.cpp
            ExpandedWrap disabled
              MyClass* MyClass::m_instance = 0;
               
              MyClass::MyClass() : QObject(0)
              {
              }
               
              MyClass::~MyClass()
              {
              }
               
              MyClass* MyClass::getInstance()
              {
                  if (m_instance == 0)
                      m_instance = new MyClass;
                  return m_instance;
              }
               
              void MyClass::emitSignal(){
                 emit mysignal();
              }
               
              void MyClass::callback()
              {
                  /* some work */
                  getInstance()->emitSignal();
              }


            И где-то в коде:
            ExpandedWrap disabled
              QObject::connect(MyClass::getInstance(), SIGNAL(mysignal)), ..., SLOT(...));


            Но, ещё раз повторю, это решение сработает только, если у Вас всего один экземпляр данного класса.
              Спасибо большое, вроде разобрался. Да у меня 1 экземпляр, то что надо ;)
                MyClass* MyClass::getInstance()
                {
                if (m_instance == 0)
                m_instance = new MyClass;
                return m_instance;
                }

                как это работает?
                  Цитата alexmfivt @
                  MyClass* MyClass::getInstance()
                  {
                  if (m_instance == 0)
                  m_instance = new MyClass;
                  return m_instance;
                  }

                  как это работает?

                  А что Вас смущает? MyClass::getInstance() - статический метод, который возвращает указатель на экземпляр класса. Можно еще так:

                  ExpandedWrap disabled
                    class MyClass
                    {
                    public:
                        static MyClass& getInstance()
                        {
                            static MyClass myClassInstance;
                     
                            return myClassInstance;
                        }
                     
                    private:
                        MyClass(){}
                        MyClass(const MyClass& rMyClassInstance);
                        MyClass& operator=(const MyClass&);
                    };
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0439 ]   [ 16 queries used ]   [ Generated: 22.05.24, 00:59 GMT ]