#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 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 ..."); }