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

64 lines
2.4 KiB
C

#ifndef NMWXGRIDVTKCONTAINERWIDGET_H
#define NMWXGRIDVTKCONTAINERWIDGET_H
#include <QWidget>
#include "nmSubWxs_global.h" // 假设此头文件定义了 NM_SUB_WXS_EXPORT
#include <QEvent> // For eventFilter
#include <QMouseEvent> // 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