在两个Qt exe之间发送图像

时间:2014-11-17 11:01:29

标签: c++ qt exe

我试图使我的应用程序能够在不保存的情况下相互发送图像。

我发现有几种方法可以达到目标。包括:

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()无法正常工作。

1 个答案:

答案 0 :(得分:2)

  

我想使用QSharedMemory

你为什么要这样做?

如果应用程序在同一台机器上,那么我建议使用QLocalServer。在功能上它可能看起来需要一个网络,因为概念类似于QTcpSocket,但实际上,不需要网络。正如文档陈述QLocalSocket

  

在Windows上,这是一个命名管道,在Unix上,这是一个本地域套接字。

如果应用程序在不同的机器上运行,那么我建议使用QTcpServer,它具有与QLocalServer和QLocalSocket类似的功能接口。

QProcess不是解决方案。虽然文档声明&#34; QProcess类用于启动外部程序并与它们通信&#34;通信是指控制应用程序,发送输入和接收其输出和错误流。