#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
#include <vtkSmartPointer.h>
#include <vtkCommand.h>
#include <vtkRenderWindowInteractor.h>
#include <QDebug>
#include <QMouseEvent>
class vtkRenderer;
class vtkImageViewer2;
class vtkObject;
namespace Ui {
class MainWindow;
}
class MyMouseCommand;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
public:
void updateMousePosInfo(const QString& mousePosInfo);
private slots:
void openFileSlot();
private:
// 注意必须为静态函数
static void updateCoords(vtkObject* obj, unsigned long eventId, void * clientData, void * callbackData);
private:
vtkSmartPointer<vtkRenderer> pRenderer;
vtkSmartPointer<vtkImageViewer2> pImageViewer;
vtkSmartPointer<MyMouseCommand> pMouseCallback;
private:
Ui::MainWindow *ui;
};
class MyMouseCommand : public vtkCommand
{
public:
static MyMouseCommand* New()
{
return (new MyMouseCommand());
}
void setMainWindow(MainWindow* pMainWindow)
{
pMyMainWindow = pMainWindow;
}
virtual void Execute(vtkObject *caller, unsigned long eventId, void *callData)
{
qDebug() << "obj = " << (unsigned long long)(caller);
qDebug() << "eventId = " << eventId;
qDebug() << "callbackData = " << (unsigned long long)(callData);;
vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::SafeDownCast(caller);
if(iren == nullp
vtk 观察者&命令模式: vtkCommand
最新推荐文章于 2023-04-27 11:42:29 发布
本文深入探讨了VTK库中使用的观察者设计模式,重点介绍了vtkCommand类如何实现命令模式。通过理解vtkCommand,读者可以更好地掌握在C++和Qt环境中如何利用VTK进行事件处理和交互式应用开发。
摘要由CSDN通过智能技术生成