[vtkusers] Repainting problem with QVTKWidget

Wu Ruoyun MRYWu at ntu.edu.sg
Wed Apr 20 21:14:30 EDT 2005


Hi Ken

When using the original QVTKWidget as a central widget in a QMainWindow,
I found that when the window shows up first time, the window is blank.
The content will appear if I click mouse inside the window, or cover and
reveal the window using other window for a "manual" repaint. When I
resize the window, a second toolbar appears under the original toolbar.
And the "second" toolbar is not real as it disappears if I click mouse
in the window or play the cover/reveal trick. I fully agree with you
that the problem could be the Render() method within the paintEvent() of
Qt4 Beta2.

You are right that the erasing could be removed. However, the real
change is:
Previous codes may either call painter.drawPixmap() or call
iRen->Render(), depending on the cachedImageCleanFlag. The modified
codes optionally call iRen->Render() but always call
painter.drawPixmap().

Best Wishes!
Ruoyun


-----Original Message-----
From: Moreland, Kenneth [mailto:kmorel at sandia.gov] 
Sent: Wednesday, April 20, 2005 11:37 PM
To: Wu Ruoyun; vtkusers at vtk.org
Subject: RE: [vtkusers] Repainting problem with QVTKWidget

Ruoyun,

I doesn't look like you changed much in paintEvent() except erasing the
window, which is then immediately drawn over.  Did the change in
paintEvent() really do anything, or was it turning on the image cache?

Perhaps the problem is that a render within a paintEvent() is not
working for some reason.  Qt 4 is a moving target right now, so it's not
very well supported by QVTKWidget.  Unless you want to bleed a little,
you may want to consider moving back down to Qt 3.3.  That works fine
for me.

-Ken

   ****      Kenneth Moreland
    ***      Sandia National Laboratories
***********  
*** *** ***  email: kmorel at sandia.gov
**  ***  **  phone: (505) 844-8919
    ***      fax:   (505) 845-0833
 

> -----Original Message-----
> From: vtkusers-bounces at vtk.org 
> [mailto:vtkusers-bounces at vtk.org] On Behalf Of Wu Ruoyun
> Sent: Wednesday, April 20, 2005 3:49 AM
> To: vtkusers at vtk.org
> Subject: RE: [vtkusers] Repainting problem with QVTKWidget
> 
> Dear All,
> 
> Forget to mention that you also need to call 
> setAutomaticImageCacheEnabled( true ); on the QVTKWidget.
> 
> Best Wishes!
> Ruoyun
> 
> -----Original Message-----
> From: vtkusers-bounces at vtk.org 
> [mailto:vtkusers-bounces at vtk.org] On Behalf Of Wu Ruoyun
> Sent: Wednesday, April 20, 2005 5:45 PM
> To: vtkusers at vtk.org
> Subject: RE: [vtkusers] Repainting problem with QVTKWidget
> 
> Dear All,
> 
> The painting problem mentioned in my previous email could be 
> solved by modifying the original paintEvent() method as 
> below. Any comments?
> 
> Best Wishes!
> Ruoyun
> 
> void QVTKWidget::paintEvent(QPaintEvent* event) {
>   if (!this->cachedImageCleanFlag)
>     {
>       vtkRenderWindowInteractor* iren = NULL;
>       if(this->mRenWin)
>         iren = this->mRenWin->GetInteractor();
> 
>       if(!iren || !iren->GetEnabled())
>         return;
> 
>       iren->Render();
>     }
> 
>   QPainter painter(this);
>   painter.eraseRect( event->rect() );
>   painter.drawPixmap(0, 0, this->cachedImage); }
> 
> -----Original Message-----
> From: vtkusers-bounces at vtk.org 
> [mailto:vtkusers-bounces at vtk.org] On Behalf Of Wu Ruoyun
> Sent: Wednesday, April 20, 2005 4:01 PM
> To: vtkusers at vtk.org
> Subject: [vtkusers] Repainting problem with QVTKWidget
> 
> Dear All,
> 
> I am working with QVTKWidget with Qt 4.0 Beta2 and VTK CVS 
> version, Windows 2K, Visual Studio C++ 6.
> 
> The example of QVTKWidget called "ImageViewer" runs well. 
> However, I got repainting problem if I put the QVTKWidget as 
> the central widget of a QMainWindow. The following is the 
> codes. Any mistake in my code or the QVTKWidget still need 
> some touch up?
> 
> Best Wishes!
> Ruoyun
> 
> #include <QApplication.h>
> #include <QMainWindow.h>
> #include <QPushButton>
> #include <QToolBar.h>
> #include <QMenuBar.h>
> #include <QMenu.h>
> 
> #include <vtkImageViewer.h>
> #include <vtkRenderWindowInteractor.h>
> #include <vtkPNGReader.h>
> #include <vtkRenderWindow.h>
> #include <vtkRenderer.h>
> #include <QVTKWidget.h>
> 
> int main( int argc, char* argv[] )
> {
>     QApplication app(argc, argv);
>     QMainWindow window;
>     window.addToolBar( new QToolBar( "Tools", &window ) );
>     QMenu* menu = window.menuBar()->addMenu("&File");
>     menu->addAction("&Quit", &window, SLOT(close()));
> 
>     /*
>     //**** The normal Qt widget (a button here) repaints fine
>     QPushButton hello("Hello world!",&window);
>     hello.resize(100, 30);
>     window.setCentralWidget( &hello );
>     //****
>     */
> 
>     //**** Works if interacting, but not repainted well
>     QVTKWidget* widget = new QVTKWidget( &window );
>     widget->resize(256,256);
> 
>     vtkPNGReader* reader = vtkPNGReader::New();
>     char* fname = 
> "E:/Projects/vtk42/VTKData-release-4-2/Data/vtk.png";
>     reader->SetFileName(fname);
> 
>     vtkImageViewer* image_view = vtkImageViewer::New();
>     image_view->SetInput(reader->GetOutput());
> 
>     widget->SetRenderWindow(image_view->GetRenderWindow());
>  
> image_view->SetupInteractor(widget->GetRenderWindow()->GetInte
> ractor());
>     
>     window.setCentralWidget( widget );
>     //****
> 
>     window.show();
>     return app.exec();
> }
> 
> -----Original Message-----
> From: vtkusers-bounces at vtk.org 
> [mailto:vtkusers-bounces at vtk.org] On Behalf Of Wu Ruoyun
> Sent: Monday, April 18, 2005 5:07 PM
> To: vtkusers at vtk.org
> Subject: [vtkusers] QVTKWidget work with Qt 4.0.0 Beta 2?
> 
> Dear All,
> 
> Has anyone make QVTKWidget work with Trolltech's newly 
> released Qt 4.0.0 Beta 2? I got a number of errors and 
> warnings when compiling.
> 
> Best Wishes!
> Ruoyun
> 
> _______________________________________________
> This is the private VTK discussion list. 
> Please keep messages on-topic. Check the FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
> _______________________________________________
> This is the private VTK discussion list. 
> Please keep messages on-topic. Check the FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
> _______________________________________________
> This is the private VTK discussion list. 
> Please keep messages on-topic. Check the FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
> _______________________________________________
> This is the private VTK discussion list. 
> Please keep messages on-topic. Check the FAQ at: 
> http://www.vtk.org/Wiki/VTK_FAQ Follow this link to 
> subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
> 
> 




More information about the vtkusers mailing list