1

あるユーザーから別のユーザーにスクリーンショットを送信するソケットベースのプログラムを作成しています。送信する前に、スクリーンショットをバイト配列に変換する必要があります。スクリーンショットを に変換した後QByteArray、配列の先頭に 4 バイトを挿入して、それが画像であることを示します (テキストなどではなく、画像であることを示す数字 20 です)。

ソケットを介してバイト配列を他のユーザーに送信した後、受信時に最初の 4 バイトを読み取って、それが何であるかを確認します。写真だったので、ラベルに表示するQByteArrayために から に変換します。QPixmap私はそれをロードするために使用secondPixmap.loadFromData(byteArray,"JPEG")しますが、画像をロードしません。

これは私のコードのサンプルです:

 void MainWindow::shootScreen()
 {
     originalPixmap = QPixmap(); // clear image for low memory situations
                             // on embedded devices.
     originalPixmap = QGuiApplication::primaryScreen()->grabWindow(0);
     scaledPixmap = originalPixmap.scaled(500, 500);

     QByteArray bArray;
     QBuffer buffer(&bArray);
     buffer.open(QIODevice::WriteOnly);
     originalPixmap.save(&buffer,"JPEG",5);

     qDebug() << bArray.size() << "diz0";

     byteArray= QByteArray();

     QDataStream ds(&byteArray,QIODevice::ReadWrite);
     int32_t c = 20;
     ds << c;
     ds<<bArray;
 }

 void MainWindow::updateScreenshotLabel()
 {
     this->ui->label->setPixmap(secondPixmap.scaled(this->ui->label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
 }

void MainWindow::on_pushButton_clicked()
{
    shootScreen();
}

void MainWindow::on_pushButton_2_clicked()
{
    secondPixmap = QPixmap();
    QDataStream ds(&byteArray,QIODevice::ReadOnly);
    qint32 code;
    ds>>code;
    secondPixmap.loadFromData(byteArray,"JPEG");
    updateScreenshotLabel();
}
4

1 に答える 1

2

あなたのMainWindow::on_pushButton_2_clicked実装は奇妙に見えます。あなたが持っている...

QDataStream ds(&byteArray,QIODevice::ReadOnly);

QDataStreamからの入力データを読み取る読み取り専用を作成しますbyteArray。しかし、後であなたは...

secondPixmap.loadFromData(byteArray,"JPEG");

を完全にバイパスして、同じQPixmapものから直接読み取ろうとします。 QByteArrayQDataStream

QPixmapから読み書きする静的メンバーを利用することもできますQDataStream。だから、あなたは次のようなものを探していると思います...

QDataStream ds(&byteArray,QIODevice::ReadOnly);
qint32 code;
ds >> code;
if (code == 20)
  ds >> secondPixmap;

同様に、MainWindow::shootScreen実装についても。を利用することで、コードをかなり減らすことができますQDataStream & operator<<(QDataStream &stream, const QPixmap &pixmap)

于 2016-07-13T08:38:56.880 に答える