#ifndef CAMHANDLER_H #define CAMHANDLER_H #include #include #include #include // 用于在信号中传输图像数据 #include // 用于驱动采集循环 // eBUS SDK 核心头文件 #include #include #include #include #include #include #include #include #include #include #include "savetask.h" #include // 需要包含 QThreadPool // 用于流缓冲区数量的定义 (参考例程) #define BUFFER_COUNT 16 class CamHandler : public QObject { Q_OBJECT public: explicit CamHandler(QObject *parent = nullptr); ~CamHandler(); // 公有接口:连接/断开/发现 // 注意:已移除 static 关键字,以便使用成员变量 mSystem 进行设备发现 QList listAvailableDevices(); bool connectToDevice(const QString &aConnectionID); void disconnectDevice(); // 公有接口:采集控制 void startAcquisition(); void stopAcquisition(); bool state; bool saveFlag; // ------------------- 信号 (Signals) ------------------- signals: void imageReady(const QImage &image); // 发送采集到的图像数据 void logMsg(const QString &msg); // ------------------- 槽 (Slots) ------------------- public slots: void onAcquireTimerTimeout(); // 驱动图像采集循环的槽 private: // eBUS SDK 对象 PvDevice *mDevice; PvStream *mStream; // 关键修正:PvSystem 实例作为成员变量,其生命周期与 CamHandler 相同 PvSystem mSystem; // mDeviceInfo 指针,指向 mSystem 内部的有效数据 const PvDeviceInfo *mDeviceInfo; // 计时和帧控制 QTimer mAcquireTimer; // 内部帮助函数 const PvDeviceInfo *selectDevice(const QString &aConnectionID); bool openStream(); void createStreamBuffers(); // 图像采集和转换函数 // 简化:onAcquireTimerTimeout 中直接调用 RetrieveBuffer // bool acquireSingleBuffer(PvBuffer **aBuffer, PvResult *aOperationResult); QImage convertPvBufferToQImage(PvBuffer *aBuffer); }; #endif // CAMHANDLER_H