#ifndef NMWXGRIDVTKCONTAINERWIDGET_H #define NMWXGRIDVTKCONTAINERWIDGET_H #include #include "nmSubWxs_global.h" // 假设此头文件定义了 NM_SUB_WXS_EXPORT #include // For eventFilter #include // For eventFilter class QVBoxLayout; // QVBoxLayout 的前向声明 class QVTKWidget; // QVTKWidget 的前向声明 class QImage; class vtkImageData; class vtkUnsignedCharArray; class NM_SUB_WXS_EXPORT nmWxGridVTKContainerWidget : public QWidget { Q_OBJECT public: // 构造函数:初始化部件并设置父对象。 nmWxGridVTKContainerWidget(QWidget *parent = nullptr); // 将 VTK 图像数据(vtkImageData)转换为 Qt 的 QImage 对象 QImage createQImage(vtkImageData* imageData); // 处理单通道图像,灰度图像 QImage createQImage1(int nWidth, int nHeight, vtkUnsignedCharArray* pScalars); // 处理双通道图像,灰度图像带有 Alpha 透明度 QImage createQImage2(int nWidth, int nHeight, vtkUnsignedCharArray* pScalars); // 处理三通道图像,RGB 彩色图像 QImage createQImage3(int nWidth, int nHeight, vtkUnsignedCharArray* pScalars); // 处理四通道图像,RGBA 彩色图像 QImage createQImage4(int nWidth, int nHeight, vtkUnsignedCharArray* pScalars); protected: // **新增:事件过滤器,用于捕获来自 m_pVtkWidget 的鼠标事件** bool eventFilter(QObject *pObj, QEvent *event) override; signals: private: // 私有辅助方法,用于初始化 UI 和 VTK 组件。 void initLayout(); // 初始化主布局。 void initVTKWidget(); // 初始化 QVTKWidget 及其 VTK 渲染管线。 // 将VTK渲染内容转换为QImage QImage getVTKRenderWindowAsImage(); private slots: // 图片和打印操作的槽函数,现在属于此类。 void saveWidgetAsImage(); // 将 m_pVtkWidget 的内容保存为图片文件。 void copyWidgetImage(); // 将 m_pVtkWidget 的内容复制到剪贴板。 void printWidget(); // 打印 m_pVtkWidget 的内容。 void printPreviewWidget(); // 显示 m_pVtkWidget 内容的打印预览。 // 辅助槽函数,负责将部件内容渲染到 QPrinter 以进行打印/预览。 void renderWidgetForPrint(QPrinter *printer); private: QVBoxLayout* m_pMainLayout; // 此容器部件的主垂直布局。 // 指向 QVTKWidget 实例的指针,用于显示 VTK 内容。 QVTKWidget* m_pVtkWidget; }; #endif // NMWXGRIDVTKCONTAINERWIDGET_H