I'm a bit new to Qt
, after reading this question I'm trying to learn more about QRemoteObject
, following the mentioned question, comments, and links, I tried to write a class to share data between processes.
Based on the doc I build this .rep
file into the two processes:
class SharedObject
{
SIGNAL(signalAPP1(QString text))
SIGNAL(signalAPP2(QString text))
};
However, when I press F2
on APP1
it's not firing the lambda on APP2
connect(ptr.data(), &SharedObjectReplica::signalAPP1, this, [](QString text) {
qDebug() << "signalAPP1! text:" << text;
});
The same thing happens when i press F2
on APP2
, it's not firing the lambda on APP1
connect(sharedObject, &SharedObject::signalAPP2, this, [=](QString text) {
qDebug() << "signalAPP2! text:" << text;
});
What i'm missing?
app1.h
#include "rep_sharedobject_source.h"
class SharedObject : public SharedObjectSource
{
Q_OBJECT
public:
signals:
void signalAPP1(QString text);
void signalAPP2(QString text);
};
QT_BEGIN_NAMESPACE
namespace Ui { class APP1Class; };
QT_END_NAMESPACE
class APP1 : public QMainWindow
{
Q_OBJECT
public:
SharedObject* sharedObject = nullptr;
QRemoteObjectHost srcNode;
Ui::APP1Class *ui;
APP1(QWidget *parent = nullptr) : QMainWindow(parent), ui(new Ui::APP1Class())
{
ui->setupUi(this);
sharedObject = new SharedObject();
sharedObject->setObjectName("sharedObject");
srcNode.setHostUrl(QUrl(QStringLiteral("local:sharedObject")));
srcNode.enableRemoting(sharedObject);
QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_F2), this);
connect(shortcut, &QShortcut::activated, [=] {
qDebug() << "emiting...";
emit sharedObject->signalAPP1("hello from APP1");
});
connect(sharedObject, &SharedObject::signalAPP2, this, [=](QString text) {
qDebug() << "signalAPP2! text:" << text;
});
}
};
app2.h
#include "rep_sharedobject_replica.h"
QT_BEGIN_NAMESPACE
namespace Ui { class APP2Class; };
QT_END_NAMESPACE
class APP2 : public QMainWindow
{
Q_OBJECT
public:
Ui::APP2Class *ui;
QSharedPointer<SharedObjectReplica> ptr;
QRemoteObjectNode repNode;
APP2(QWidget *parent = nullptr) : QMainWindow(parent), ui(new Ui::APP2Class())
{
ui->setupUi(this);
repNode.connectToNode(QUrl(QStringLiteral("local:sharedObject")));
ptr.reset(repNode.acquire<SharedObjectReplica>());
connect(ptr.data(), &SharedObjectReplica::initialized, this, [=]
{
qDebug() << "conected...";
connect(ptr.data(), &SharedObjectReplica::signalAPP1, this, [](QString text) {
qDebug() << "signalAPP1! text:" << text;
});
});
QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_F2), this);
connect(shortcut, &QShortcut::activated, [=] {
QString str = "hello from APP2";
emit ptr.data()->signalAPP2(str);
});
}
};