mainWindow代碼如下(由於篇幅問題,子視窗代碼不貼出了,有需要源碼的可以留下郵箱): ~~~~ / Author : 博客園 Lance / include "mainwindow.h" include "ui_mainwindow.h" include include include in ...
mainWindow代碼如下(由於篇幅問題,子視窗代碼不貼出了,有需要源碼的可以留下郵箱):
/*
* Author : 博客園 Lance#
*/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QUrl>
#include <QPixmap>
#include <QFile>
#include <qdebug>
#include <QPicture>
#include <QMessageBox>
/* 構造和析構 */
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
/* 初始化函數,在子視窗中調用 */
void MainWindow::init()
{
QString url;
/* 創建一個用於應用程式發送網路請求和接收網路應答的"管理員" */
manager = new QNetworkAccessManager(this);
/* Mjpeg-streamer伺服器的地址,這裡我們獲取的是snapshot而不是視頻流,簡單方便 */
url.append("http://"+ipAddr+":"+port+"/?action=snapshot");
qDebug() << url;
/* 創建一個要發送的請求實例 */
request = new QNetworkRequest(QUrl(url));
/* 設置圖像是否自適應Label, 用來實現圖像的放大和縮小 */
ui->label->setScaledContents(state);
this->setWindowTitle("Camera Client");
/* 隱藏圖標 */
this->setWindowFlags(this->windowFlags()&~(Qt::WindowMaximizeButtonHint|Qt::WindowCloseButtonHint));
}
/* 實現槽函數 */
void MainWindow::mjpeg_streamer_reply(QNetworkReply *reply)
{
/* 讀出全部數據 */
QByteArray byteArr = reply->readAll();
/* 構建pixmap */
QPixmap pixmap;
pixmap.loadFromData(byteArr);
/* Label顯示圖像 */
ui->label->setPixmap(pixmap);
ui->label->show();
/* 繼續請求URL */
manager->get(*request);
}
/* 雙擊實現放大縮小 */
void MainWindow::mouseDoubleClickEvent(QMouseEvent *)
{
state = !state;
ui->label->setScaledContents(state);
}
/* 開始/暫停 按鈕點擊槽函數 */
void MainWindow::on_button_start_clicked()
{
QString name;
if((btnStartSta = !btnStartSta) == false){
name = "暫停";
/* 設置"請求完成"與mjpeg_streamer_reply()這個槽關聯 */
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(mjpeg_streamer_reply(QNetworkReply*)));
/* 開始請求URL */
manager->get(*request);
}
else{
name = "開始";
/* 解除關聯,這樣就不顯示了 */
disconnect(manager, SIGNAL(finished(QNetworkReply*)), this, NULL);
}
ui->button_start->setText(name);
}
/* 截圖按鈕槽函數 */
void MainWindow::on_button_snapshot_clicked()
{
QDate date;
QTime time;
/* 取到當前顯示的pixmap指針 */
const QPixmap *pixmap = ui->label->pixmap();
if(pixmap){
/* 保存為jpg文件,並保證名字不相同 */
pixmap->save("Snapshot/Snapshot-"+date.currentDate().toString("yyyy,MM,dd")+"-"+
time.currentTime().toString("hh;mm;ss")+".jpg");
QMessageBox::about(this, " ", "Save Successed!");
}
}
/* 退出按鈕槽函數 */
void MainWindow::on_button_exit_clicked()
{
this->close();
}
客戶端的使用是建立在你的伺服器端已經搭好,伺服器可以在PC、ARM板、路由....上實現。
命令行啟動伺服器,參數如下:
解析度不要過高,會產生卡頓,( 畢竟我們是簡單版 ^_^ )
效果展示:
打開程式,子視窗如下:
輸入IP,Port後點擊登錄:
點擊開始,並可以放大、縮小:
點擊截圖,就可以保存當前畫面,如圖保存成功:
轉發保留出處,
有什麼問題,歡迎探討,謝謝支持!