Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.220.238.93] |
|
Сообщ.
#1
,
|
|
|
Как создать static signal в QT? Проблема такая: в классе есть несколько статических CALLBACK функций, которые вызываются извне. Мне необходимо из этого класса послать signal (emit) информирующий о работе этих CALLBACK функций.
|
Сообщ.
#2
,
|
|
|
GrinEd, если у Вас существует только один экземпляр данного класса, можно использовать Singleton.
|
Сообщ.
#3
,
|
|
|
можно сделать по аналогии QApplication::Instance , тогда внутри калбека нужно дергать
MyCallback() { SomeClass::Instance()->NotifyMyCallback(); } где SomeClass::NotifyMyCallback() { emit SomeSignal; } |
Сообщ.
#4
,
|
|
|
klep это что-то типа фабрики в java?
|
Сообщ.
#5
,
|
|
|
GrinEd, это обычный Singleton. Фабрика это немного другое (хотя она обычно тоже через синглтон реализуется). В общем, как-то так (набросок):
MyClass.h 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 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(); } И где-то в коде: QObject::connect(MyClass::getInstance(), SIGNAL(mysignal)), ..., SLOT(...)); Но, ещё раз повторю, это решение сработает только, если у Вас всего один экземпляр данного класса. |
Сообщ.
#6
,
|
|
|
Спасибо большое, вроде разобрался. Да у меня 1 экземпляр, то что надо
|
Сообщ.
#7
,
|
|
|
MyClass* MyClass::getInstance()
{ if (m_instance == 0) m_instance = new MyClass; return m_instance; } как это работает? |
Сообщ.
#8
,
|
|
|
Цитата alexmfivt @ MyClass* MyClass::getInstance() { if (m_instance == 0) m_instance = new MyClass; return m_instance; } как это работает? А что Вас смущает? MyClass::getInstance() - статический метод, который возвращает указатель на экземпляр класса. Можно еще так: class MyClass { public: static MyClass& getInstance() { static MyClass myClassInstance; return myClassInstance; } private: MyClass(){} MyClass(const MyClass& rMyClassInstance); MyClass& operator=(const MyClass&); }; |