This library adds a facility to use Qt signals and slots across local processes and over TCP. Based on QLocalSocket and QTcpSocket, it is a cross platform IPC solution with native syntax for Qt programs.
CuteIPC works with both Qt4 and Qt5 and can be built using cmake or qbs.
To build using cmake:
cmake CMakeLists.txt
make
make install
To build using qbs:
qbs build profile:<profile name>
qbs install --install-root /usr/local profile:<profile name>
Finally, add the include
directory of CuteIPC to your project.
First, create a server and associate it with a desired QObject
.
The signals and slots of this object will be used in IPC.
CuteIPCService* service = new CuteIPCService;
// setup local server
service->listen("serverName", myObject);
// or TCP server using host and port
service->listenTcp(QHostAddress::Any, 31337, myObject);
On the other side, create the interface and connect to the server:
CuteIPCInterface* interface = new CuteIPCInterface;
// connect locally
interface->connectToServer("myServerName");
// or over TCP
interface->connectToServer(QHostAddress("192.0.2.1"), 31337);
You can to directly invoke any invokable method or public slot of the corresponding object. The syntax is similar to QMetaObject::invokeMethod.
- Use
call
method to invoke synchronously and wait for result in the event loop:
int result;
interface->call("remoteMethod", Q_RETURN_ARG(int, result), Q_ARG(QString, methodParameter));
- Use
callNoReply
to send invoke request asynchronously and return immediately:
interface->callNoReply("remoteMethod", Q_ARG(QString, methodParameter));
- You can natively connect the remote signal to a local slot:
interface->remoteConnect(SIGNAL(remoteSignal(QString)), receiver, SLOT(receiverSlot(QString)));
- or local signal to the remote slot:
interface->remoteSlotConnect(senderObject, SIGNAL(localSignal(QString)), SLOT(remoteSlot(QString)));
Please note, that all signals are sent asynchronously.
A full API reference can be generated using doxygen
in the source root.
This library is contributed under LGPL 2.1 license. Feel free to contact us if you're interested in using this library on other terms.