Visual Studio — Использование сигналов Qt в не Qt-приложении (C ++)

У меня много существующего кода, использующего Qt, и более конкретно, сигналы и слоты Qt для конкретных действий по времени.

Теперь мне нужно использовать этот код в новом приложении, которое не является приложением Qt (и не может быть — я пишу плагин для Visual Studio). В любом случае — как я могу заставить существующий код фактически перехватывать сигналы и активировать соответствующие слоты?

Нужно ли как-то создавать фиктивное приложение Qt? Если так — как я могу заставить его обрабатывать сигналы, не превращаясь в блокирующий цикл для остальной части моего кода?

3

Решение

Кажется, что если вы напишите что-то вроде этого, сообщение «Test» все еще печатается, даже если нет никакого цикла событий, так что это может быть подсказка:

#include <QObject>
#include <QCoreApplication>
#include <QDebug>

class MyClass : public QObject
{
Q_OBJECT
public:
explicit MyClass(QObject *parent) : QObject(parent) {}
void testMethod() { emit testSignal(); }

signals:
void testSignal();

public slots:
void testSlot() { qDebug() << "Test"; }
};

#include "main.moc"
int main(int argc, char **argv)
{
// QCoreApplication coreApplication(argc, argv);
MyClass myObject(0);
QObject::connect(&myObject, SIGNAL(testSignal()), &myObject, SLOT(testSlot()));
myObject.testMethod();
// return coreApplication.exec();
return 0;
}

Таким образом, вам все равно понадобится Qt, но вы можете избежать «блокирующего» цикла событий. Однако может быть проще переставить код с многоуровневого сигнального слота на прямые вызовы, в зависимости от того, сколько прямых вызовов вам нужно сделать для испускаемого сигнала.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]