[vtkusers] QVTK issue with vtkImageViewer2

Ashish Singh asinghmlists at gmail.com
Thu Nov 19 11:59:19 EST 2009


Hi,

I am trying to display each slice from a series of CT scans in a QVTKwidget.
The QVTKWidget itself is in a QMainWindow with 3 other widgets to browse,
load and unload the data. I want to be able to display the data in
QVTKwidget as soon as I hit the load button. I also want to be able to
unload the data and clear the QVTKwidget as soon as I hit the unload button
so that I can load a new dataset afterwards.

I can read and display the data fine only the first time. I can also unload
the data, but after unload when I try to load new data it doesn't show up in
my QVTKwidget. Can anyone please tell me what am I missing or doing wrong
here and how to correct it?

My development environment is:
Windows XP Pro x64
Visual Studio 2005
VTK 5.4.2
Qt 4.5.0

Thanks,
Ashish

Here's the code that I use:
----Header file: test.h-----
#include <QObject>
#include <QPushButton>
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QMainWindow>
#include <QVTKWidget.h>
#include <QWidget>
#include <QString>
#include <QFileDialog>
#include <QDir>
#include <qapplication.h>
#include <qobject.h>
#include <QtGui>

#include <vtkDICOMImageReader.h>
#include <vtkImageViewer2.h>
#include <vtkRenderWindow.h>
#include "vtkRenderer.h"
#include "vtkCornerAnnotation.h"
#include "vtkImageData.h"


using namespace std;

class test : public QObject
{
    Q_OBJECT

public:
    string dirname;
    vtkDICOMImageReader *reader;
    vtkImageViewer2 *imgview;
    vtkImageData *blank;

    QMainWindow *mymainwindow;
    QWidget *centralwidget;
    QLabel *mylabel;
    QPushButton *mypbutton;
    QPushButton *myloadbutton;
    QPushButton *myunloadbutton;
    QVTKWidget *vtkwidget;
    QHBoxLayout *myhlayout;
    QVBoxLayout *myvlayout;
    test(QObject* parent = 0);
    ~test();

    public slots:
        void OnLoad();
        void OnBrowse();
        void OnUnLoad();

};

-----cpp file: test.cpp-------
#include "test.h"

test::test(QObject * parent):QObject(parent)
{
    reader = vtkDICOMImageReader::New();
    imgview = vtkImageViewer2::New();

    //create dummy data to create start up blank image
    blank = vtkImageData::New();
    blank->SetDimensions(10, 10, 1);
    blank->AllocateScalars();
    for (int i = 0; i < 10; i++)
        for (int j = 0; j < 10; j++)
            blank->SetScalarComponentFromDouble(i, j, 0, 0, 0);
    blank->Update();
    imgview->SetInput(blank);
    imgview->SetInput(blank);
    //create dummy data to create start up blank image

    mymainwindow = new QMainWindow();
    centralwidget = new QWidget(mymainwindow);

    mylabel = new QLabel(centralwidget);
    mypbutton = new QPushButton(centralwidget);
    myloadbutton = new QPushButton(centralwidget);
    myunloadbutton = new QPushButton(centralwidget);

    vtkwidget = new QVTKWidget(centralwidget);
    vtkwidget->GetRenderWindow()->AddRenderer(imgview->GetRenderer());
    vtkwidget->setFixedSize(512,512);

    myhlayout = new QHBoxLayout();
    myvlayout = new QVBoxLayout();

    //setup UI
    mylabel->setText("Select Dicom Dir");
    mypbutton->setText("Browse");
    this->connect(this->mypbutton,SIGNAL(clicked()),this, SLOT(OnBrowse()));

    myloadbutton->setText("Load");
    this->connect(this->myloadbutton,SIGNAL(clicked()),this,
SLOT(OnLoad()));

    myunloadbutton->setText("Unload");

this->connect(this->myunloadbutton,SIGNAL(clicked()),this,SLOT(OnUnLoad()));

    myhlayout->addWidget(mylabel);
    myhlayout->addWidget(mypbutton);
    myhlayout->addWidget(myloadbutton);
    myhlayout->addWidget(myunloadbutton);

    myvlayout->addLayout(myhlayout);
    myvlayout->addWidget(vtkwidget);

    centralwidget->setLayout(myvlayout);
    mymainwindow->setCentralWidget(centralwidget);
    mymainwindow->show();
}

test::~test()
{
    reader->Delete();
    imgview->Delete();
    blank->Delete();
}

void test::OnLoad()
{
    reader->SetDirectoryName(dirname.c_str());
    reader->Update();
    imgview->SetInput(reader->GetOutput());
    imgview->GetRenderer()->ResetCamera();
    vtkwidget->update();
}

void test::OnUnLoad()
{
    imgview->GetRenderer()->RemoveAllViewProps();
    imgview->GetRenderer()->ResetCamera();
    vtkwidget->update();
}

void test::OnBrowse()
{
    QString indirectory =
QFileDialog::getExistingDirectory(this->centralwidget,tr("Select Input
Directory"), QDir::currentPath());
    dirname = indirectory.toStdString();
}

-----main.cpp---------
#include "test.h"
void main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    test *mywin = new test;
    app.exec();

}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20091119/d1f1e040/attachment.htm>


More information about the vtkusers mailing list