I am implement the project with QVTKOpenGLNativeWidget
, and it works fine.
Then, I want to pick actor in the mouseMoveEvent
, but the widget turn to be transparent when the cursor is move to the button (no click):
The code to reproduce this bug is:
class Widget : public QVTKOpenGLNativeWidget
{
public:
Widget()
{
vtkSmartPointer<vtkSphereSource> sphere = vtkSmartPointer<vtkSphereSource>::New();
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(sphere->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
render = vtkSmartPointer<vtkRenderer>::New();
render->AddActor(actor);
renWin = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
renWin->AddRenderer(render);
this->setRenderWindow(renWin);
picker = vtkSmartPointer<vtkPropPicker>::New();
}
void mouseMoveEvent(QMouseEvent* event)
{
QVTKOpenGLNativeWidget::mouseMoveEvent(event);
QPoint pos = event->pos();
picker->PickProp(pos.x(), pos.y(), render);
}
vtkSmartPointer<vtkRenderer> render;
vtkSmartPointer<vtkGenericOpenGLRenderWindow> renWin;
vtkSmartPointer<vtkPropPicker> picker;
};
void main(int argc, char* argv[])
{
QApplication a(argc, argv);
QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());
QWidget* win = new QWidget();
win->setWindowTitle("test project");
QVBoxLayout* layout = new QVBoxLayout();
win->setLayout(layout);
QPushButton* btn = new QPushButton(win);
btn->setText("window");
Widget* widget = new Widget();
layout->addWidget(btn);
layout->addWidget(widget);
win->show();
win->resize(800, 600);
a.exec();
}
My environment is:
win10
vs 2019
vtk 9.0.3
qt 5.12.4
Firstly, I click on the vtkwidget, then I move the cursor to the QPushButton
, the vtkwidget will be transparent. If I re-click on the vtkwidget, the vtkwidget will turn to be normal.
Any suggestion is appreciated!