增加截屏回传

This commit is contained in:
sonichy 2023-04-01 13:19:31 +08:00
parent 3dcde0ed48
commit 03e78fb975
4 changed files with 57 additions and 12 deletions

BIN
FileTrans

Binary file not shown.

View File

@ -1,13 +1,14 @@
# File Trans
基于 Qt Socket 的文件传输和消息发送软件。
基于 Qt Socket 的文件传输和消息发送软件,支持远程播放、截屏回传
FileTrans 程序在 64 位 Linux 系统 Qt5.15.2 编译。
## 界面
![alt](preview.png)
## Android版
https://gitlink.org.cn/sonichy/FileTrans_Android
[https://gitlink.org.cn/sonichy/FileTrans_Android](https://gitlink.org.cn/sonichy/FileTrans_Android)
## 参考
[Qt文件服务器](https://github.com/sonichy/HTYServer)
[Android手机间使用socket进行文件互传实例](https://www.cnblogs.com/zhujiabin/p/7139644.html)
[Android手机间使用socket进行文件互传实例](https://www.cnblogs.com/zhujiabin/p/7139644.html)
[QPixmap编码成jpg的内存操作](https://blog.csdn.net/jklinux/article/details/71699182)

View File

@ -104,7 +104,7 @@ void MainWindow::newConnect()
qDebug() << socketError;
QMetaEnum metaEnum = QMetaEnum::fromType<QAbstractSocket::SocketError>();
QString errorString = metaEnum.valueToKey(socketError);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] " + errorString);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] newConnect: " + errorString);
});
}
@ -129,10 +129,7 @@ void MainWindow::readyRead()
if (command == "capture") {
QScreen *screen = QApplication::primaryScreen();
QPixmap pixmap = screen->grabWindow(QApplication::desktop()->winId());
QDateTime time = QDateTime::currentDateTime();
QString filename = time.toString("yyyyMMddhhmmss") + ".jpg";
QString path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/" + filename;
pixmap.save(path, nullptr, 100);
upload(pixmap, tcpSocket->peerAddress(), tcpSocket->localPort());
}
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] [" + IP_remote + "] " + command);
} else if (type == "open") {
@ -186,7 +183,7 @@ void MainWindow::on_pushButton_send_pressed()
qDebug() << socketError;
QMetaEnum metaEnum = QMetaEnum::fromType<QAbstractSocket::SocketError>();
QString errorString = metaEnum.valueToKey(socketError);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] " + errorString);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] Text: " + errorString);
});
tcpSocket1->connectToHost(QHostAddress(ui->lineEdit_ip->text()), port);
connect(tcpSocket1, &QTcpSocket::connected, [=](){
@ -211,7 +208,7 @@ void MainWindow::on_pushButton_open_pressed()
qDebug() << socketError;
QMetaEnum metaEnum = QMetaEnum::fromType<QAbstractSocket::SocketError>();
QString errorString = metaEnum.valueToKey(socketError);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] " + errorString);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] Play: " + errorString);
});
tcpSocket1->connectToHost(QHostAddress(ui->lineEdit_ip->text()), port);
connect(tcpSocket1, &QTcpSocket::connected, [=](){
@ -233,7 +230,7 @@ void MainWindow::on_pushButton_capture_pressed()
qDebug() << socketError;
QMetaEnum metaEnum = QMetaEnum::fromType<QAbstractSocket::SocketError>();
QString errorString = metaEnum.valueToKey(socketError);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] " + errorString);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] Capture: " + errorString);
});
tcpSocket1->connectToHost(QHostAddress(ui->lineEdit_ip->text()), port);
connect(tcpSocket1, &QTcpSocket::connected, [=](){
@ -259,7 +256,7 @@ void MainWindow::upload(QString filepath)
qDebug() << socketError;
QMetaEnum metaEnum = QMetaEnum::fromType<QAbstractSocket::SocketError>();
QString errorString = metaEnum.valueToKey(socketError);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] " + errorString);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] File: " + errorString);
});
tcpSocket1->connectToHost(QHostAddress(ui->lineEdit_ip->text()), port);
@ -300,6 +297,51 @@ void MainWindow::upload(QString filepath)
});
}
void MainWindow::upload(QPixmap pixmap, QHostAddress hostAddress, quint64 port)
{
QTcpSocket *tcpSocket1 = new QTcpSocket(this);
connect(tcpSocket1, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), [=](QAbstractSocket::SocketError socketError){
qDebug() << socketError;
QMetaEnum metaEnum = QMetaEnum::fromType<QAbstractSocket::SocketError>();
QString errorString = metaEnum.valueToKey(socketError);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] Pixmap info: " + errorString);
});
tcpSocket1->connectToHost(hostAddress, port);
connect(tcpSocket1, &QTcpSocket::connected, [=](){
QString fileName = QDateTime::currentDateTime().toString("yyyyMMddHHmmss") + ".jpg";
QJsonObject JO;
JO.insert("type", "file");
JO.insert("fileName", fileName);
JO.insert("lastModified", 0);
QString s = QJsonDocument(JO).toJson(QJsonDocument::Compact);
tcpSocket1->write(s.toUtf8());
tcpSocket1->close();
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] 上传:" + s);
});
QTcpSocket *tcpSocket2 = new QTcpSocket(this);
connect(tcpSocket2, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), [=](QAbstractSocket::SocketError socketError){
qDebug() << socketError;
QMetaEnum metaEnum = QMetaEnum::fromType<QAbstractSocket::SocketError>();
QString errorString = metaEnum.valueToKey(socketError);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] Pixmap upload: " + errorString);
});
tcpSocket2->connectToHost(hostAddress, port);
connect(tcpSocket2, &QTcpSocket::connected, [=](){
//QPixmap编码成jpg的内存操作https://blog.csdn.net/jklinux/article/details/71699182
QByteArray BA;
QBuffer buffer(&BA);
if (!pixmap.save(&buffer, "jpg")) {
QMessageBox::critical(this, "Error", "QPixmap.save(QBuffer,\"jpg\") failed");
return;
}
tcpSocket2->write(BA);
ui->textBrowser->append("[" + QDateTime::currentDateTime().toString("HH:mm:ss") + "] Pixmap上传完成");
tcpSocket2->close();
});
}
void MainWindow::dragEnterEvent(QDragEnterEvent *e)
{
//if(e->mimeData()->hasFormat("text/uri-list")) //只接收文件列表

View File

@ -23,6 +23,7 @@
#include <QDesktopWidget>
#include <QStandardPaths>
#include <QDesktopServices>
#include <QBuffer>
namespace Ui {
class MainWindow;
@ -47,6 +48,7 @@ private:
qint64 length=0, port_local;
QString BS(long b);
void upload(QString filepath);
void upload(QPixmap pixmap, QHostAddress hostAddress, quint64 port);
double lastModified = 0;
void dragEnterEvent(QDragEnterEvent*);
void dropEvent(QDropEvent*);