You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/nmNum/nmSubWxs/nmWxGridVTKContainerWidget.h

72 lines
2.8 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef NMWXGRIDVTKCONTAINERWIDGET_H
#define NMWXGRIDVTKCONTAINERWIDGET_H
#include <QWidget>
#include "nmSubWxs_global.h" // 假设此头文件定义了 NM_SUB_WXS_EXPORT
#include <QEvent> // For eventFilter
#include <QMouseEvent> // For eventFilter
#include <QPointer>
class QVBoxLayout; // QVBoxLayout 的前向声明
class QVTKWidget; // QVTKWidget 的前向声明
class QImage;
class nmDataAnalyzeManager;
class vtkImageData;
class vtkUnsignedCharArray;
class NM_SUB_WXS_EXPORT nmWxGridVTKContainerWidget : public QWidget
{
Q_OBJECT
public:
/**
* @brief 创建绑定到指定分析数据管理器的网格 VTK 容器。
* @note 视图只读取该管理器的网格,切换活动窗口不会改变数据来源。
*/
nmWxGridVTKContainerWidget(nmDataAnalyzeManager* pDataManager,
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:
/** @brief 当前网格视图所属的数据管理器;对象销毁时 QPointer 自动置空。 */
QPointer<nmDataAnalyzeManager> m_pDataManager;
QVBoxLayout* m_pMainLayout; // 此容器部件的主垂直布局。
// 指向 QVTKWidget 实例的指针,用于显示 VTK 内容。
QVTKWidget* m_pVtkWidget;
};
#endif // NMWXGRIDVTKCONTAINERWIDGET_H