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++

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
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