2014-11-17 2 views
0

Я пытаюсь сделать мои приложения способными отправлять изображения друг другу, не сохраняя их.Отправка изображения между двумя Qt exe

Я нашел, что есть несколько способов достижения цели. В том числе:

QSharedMemory

QLocalServer

QProcess

Я хотел бы использовать QSharedMemory, но я не знаю, как передать сигнал от одного к другому, чтобы сделать запрос. В следующем примере показано, как использовать QShareMemory, но не передавать сигнал.

http://qt-project.org/doc/qt-4.8/ipc-sharedmemory.html

Если я выбираю судиться QLocalServer, это означает, что я должен общаться через сеть (?). Я не знаю, является ли это хорошей идеей или нет, потому что файлы изображений могут быть огромными.

Если я предпочитаю использовать QProcess, я не знаю, как установить соединение между двумя приложениями, если они открыты отдельно, дважды дважды нажмите на exe.

Любые предложения? Огромное спасибо!

Update

Я пытаюсь использовать QLocalSocket, но я застрял отправка изображения в другое приложение причины застрял в bytesAvailable() во время цикла.

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() не работает.

ответ

2

Я хотел бы использовать QSharedMemory

Почему у вас есть желание сделать это?

Если приложения находятся на одной машине, то я предлагаю использовать QLocalServer. Функционально может показаться, что требуется сеть, так как концепции похожи на QTcpSocket, но на самом деле сеть не требуется. Как утверждают Документы QLocalSocket

В Windows это именованный канал и на Unix это локальный сокет.

Если приложения работают на разных машинах, то я предлагаю использовать QTcpServer, который имеет аналогичный функциональный интерфейс, как QLocalServer и QLocalSocket.

QProcess здесь не решение.Пока состояние документов «Класс QProcess используется для запуска внешних программ и для связи с ними« связь относится к управлению приложением, отправке ввода и получению его выходных и потоков ошибок.

+0

Спасибо! Но кто будет сервером? Если сервер не открыт, могу ли я попросить Qt открыть его для меня? – KKyang

+0

Либо может быть сервер. Это зависит от вашего дизайна. Обратите внимание, что вы можете получить путь к файлу с QLocalServer :: fullServerName и проверить наличие его с помощью QFileInfo :: exists. – TheDarkKnight

+0

Спасибо, что подарили мне замечательные идеи. Я достигаю своей цели, используя QSharedMemory + QLocalSocket – KKyang

Смежные вопросы