我试图使我的应用程序能够在不保存的情况下相互发送图像。
我发现有几种方法可以达到目标。包括:
QSharedMemory
QLocalServer
QProcess中
我想使用QSharedMemory,但我不知道如何从一个发送信号到另一个发出请求。以下示例显示如何使用QShareMemory但没有发送信号。
http://qt-project.org/doc/qt-4.8/ipc-sharedmemory.html
如果我选择起诉QLocalServer,那意味着我必须通过网络进行通信(?)。我不知道这是不是一个好主意,因为图像文件可能很大。
如果我选择使用QProcess,我不知道如果通过直接双击exe来单独打开两个应用程序之间如何建立连接。
有什么建议吗?非常感谢!
更新
我尝试使用QLocalSocket,但我发送图像到另一个应用程序导致卡在bytesAvailable()while循环中。
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_3);
if(client_status == 0)
{
out << m_message;
}
else if(client_status == 1)
{
out << m_image;
}
out.device()->seek(0);
m_socket->write(block);
m_socket->flush();
程序停留在这里。
while (clientConnection->bytesAvailable() < (int)dataSize)
我尝试将dataSize
的大小设置为等于block.size()
无法正常工作。
答案 0 :(得分:2)
我想使用QSharedMemory
你为什么要这样做?
如果应用程序在同一台机器上,那么我建议使用QLocalServer。在功能上它可能看起来需要一个网络,因为概念类似于QTcpSocket,但实际上,不需要网络。正如文档陈述QLocalSocket
在Windows上,这是一个命名管道,在Unix上,这是一个本地域套接字。
如果应用程序在不同的机器上运行,那么我建议使用QTcpServer,它具有与QLocalServer和QLocalSocket类似的功能接口。
QProcess不是解决方案。虽然文档声明&#34; QProcess类用于启动外部程序并与它们通信&#34;通信是指控制应用程序,发送输入和接收其输出和错误流。