138 lines
3.7 KiB
C++
138 lines
3.7 KiB
C++
#include "mainwindow.h"
|
||
#include "ui_mainwindow.h"
|
||
|
||
MainWindow::MainWindow(QWidget *parent)
|
||
: QMainWindow(parent)
|
||
, ui(new Ui::MainWindow)
|
||
{
|
||
ui->setupUi(this);
|
||
cam1 = new CamHandler("cam1",this);
|
||
cam2 = new CamHandler("cam2",this);
|
||
connect(cam1, &CamHandler::logMsg, this, &MainWindow::onLogPrint1);
|
||
connect(cam1, &CamHandler::imageReady, this, &MainWindow::picUpdate1);
|
||
|
||
connect(cam2, &CamHandler::logMsg, this, &MainWindow::onLogPrint2);
|
||
|
||
m_scene1 = new QGraphicsScene(this);
|
||
ui->graphicsView->setScene(m_scene1);
|
||
m_imageItem1 = nullptr; // 初始化图像项指针
|
||
}
|
||
|
||
MainWindow::~MainWindow()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
void MainWindow::onLogPrint1(const QString &msg)
|
||
{
|
||
QDateTime currentDateTime = QDateTime::currentDateTime();
|
||
QString dateTimeString = currentDateTime.toString("yyyy--MM--dd HH-mm-ss");
|
||
ui->textBrowser->append(dateTimeString + " [cam1] --> " + msg);
|
||
}
|
||
|
||
void MainWindow::onLogPrint2(const QString &msg)
|
||
{
|
||
QDateTime currentDateTime = QDateTime::currentDateTime();
|
||
QString dateTimeString = currentDateTime.toString("yyyy--MM--dd HH-mm-ss");
|
||
ui->textBrowser->append(dateTimeString + " [cam2] --> " + msg);
|
||
}
|
||
|
||
void MainWindow::picUpdate1(const QImage &image)
|
||
{
|
||
// onLogPrint1("here rev");
|
||
if (image.isNull()) {
|
||
qWarning() << "Received null image.";
|
||
return;
|
||
}
|
||
|
||
// 1. QImage 转换为 QPixmap
|
||
// 注意:如果 QImage 引用了外部数据(例如:使用 CamHandler 中的 GetDataPointer()),
|
||
// 务必使用 .copy() 或 QPixmap::fromImage() 来确保数据安全。
|
||
// 在您 CamHandler 的 convertPvBufferToQImage 中,您已经使用了 .copy(),这很好。
|
||
QPixmap pixmap = QPixmap::fromImage(image);
|
||
|
||
// 2. 将 QPixmap 放入 QGraphicsPixmapItem 中
|
||
if (m_imageItem1 == nullptr) {
|
||
// 第一次显示图像:创建 QGraphicsPixmapItem 并添加到 Scene
|
||
m_imageItem1 = m_scene1->addPixmap(pixmap);
|
||
|
||
// 可选:设置 Scene 的边界以匹配图像大小
|
||
m_scene1->setSceneRect(m_imageItem1->boundingRect());
|
||
|
||
// 可选:调整 QGraphicsView 视口以适应图像
|
||
// 如果您希望图像完整显示在 View 中,可以调用 fitInView
|
||
ui->graphicsView->fitInView(m_scene1->sceneRect(), Qt::KeepAspectRatio);
|
||
} else {
|
||
// 更新现有图像(更高效):直接更新 QGraphicsPixmapItem 的 QPixmap
|
||
m_imageItem1->setPixmap(pixmap);
|
||
}
|
||
|
||
// 强制 View 刷新,以防更新不及时
|
||
ui->graphicsView->viewport()->update();
|
||
}
|
||
|
||
void MainWindow::on_pushButton_2_clicked()
|
||
{
|
||
dc = new DialogCamSet(this);
|
||
dc->show();
|
||
}
|
||
|
||
void MainWindow::on_pushButton_3_clicked()
|
||
|
||
{
|
||
// QList<QString> tmp;
|
||
// tmp = CamHandler::listAvailableDevices();
|
||
// for(auto i: tmp){
|
||
// onLogPrint1(i);
|
||
// }
|
||
// cam1->connectToDevice("28B702523408");
|
||
|
||
if (!cam1->connectToDevice("28B702523408")) {
|
||
onLogPrint1("open failed");
|
||
return;
|
||
}
|
||
|
||
// if(!cam2->connectToDevice("1")){
|
||
// onLogPrint2("open failed");
|
||
// return;
|
||
// }
|
||
|
||
// cam2->startAcquisition();
|
||
}
|
||
|
||
void MainWindow::on_pushButton_4_clicked()
|
||
{
|
||
if (cam1->state) {
|
||
cam1->stopAcquisition();
|
||
} else {
|
||
onLogPrint1("Please connect firstly");
|
||
}
|
||
// cam2->stopAcquisition();
|
||
}
|
||
|
||
void MainWindow::on_pushButton_5_clicked()
|
||
{
|
||
ui->textBrowser->clear();
|
||
}
|
||
|
||
void MainWindow::on_pushButton_6_clicked()
|
||
{
|
||
if (cam1->state) {
|
||
cam1->startAcquisition();
|
||
} else {
|
||
onLogPrint1("Please connect firstly");
|
||
}
|
||
}
|
||
|
||
void MainWindow::on_pushButton_clicked()
|
||
{
|
||
cam1->saveFlag = true;
|
||
onLogPrint1("start saving ...");
|
||
}
|
||
|
||
void MainWindow::on_pushButton_7_clicked()
|
||
{
|
||
cam1->saveFlag = false;
|
||
onLogPrint1("stop saving ...");
|
||
}
|