Я стараюсь, чтобы мои приложения могли отправлять изображения друг другу, не сохраняя их.
Я нашел там несколько способов достижения цели. В том числе:
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()
, не работает.
Я хотел бы использовать QSharedMemory
Почему у вас есть желание сделать это?
Если приложения находятся на одном компьютере, я предлагаю использовать QLocalServer. Функционально может показаться, что требуется сеть, так как концепции похожи на QTcpSocket, но на самом деле сеть не требуется. Поскольку состояние документов для QLocalSocket
В Windows это именованный канал, а в Unix это локальный доменный сокет.
Если приложения работают на разных машинах, я предлагаю использовать QTcpServer, который имеет аналогичный функциональный интерфейс, такой как QLocalServer и QLocalSocket.
QProcess не является решением здесь. Несмотря на то, что в документах указано, что "класс QProcess используется для запуска внешних программ и для связи с ними", сообщение относится к управлению приложением, отправке ввода и получению его выходных и потоков ошибок.