Отправка изображения между двумя Qt exe

0

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

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

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

Теги:
qt
exe

1 ответ

2
Лучший ответ

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

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

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

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

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

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

  • 0
    Спасибо! Но кто будет сервером? Если сервер не открыт, могу ли я попросить Qt открыть его для меня?
  • 0
    Любой может быть сервером. Это зависит от вашего дизайна. Обратите внимание, что вы можете получить путь к файлу с помощью QLocalServer :: fullServerName и проверить его на наличие с помощью QFileInfo :: exist.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню