Hi,<br><br>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. <br>
<br>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&#39;t show up in my QVTKwidget. Can anyone please tell me what am I missing or doing wrong here and how to correct it?<br>
<br>My development environment is:<br>Windows XP Pro x64<br>Visual Studio 2005<br>VTK 5.4.2<br>Qt 4.5.0<br><br>Thanks,<br>Ashish<br><br>Here&#39;s the code that I use:<br>----Header file: test.h-----<br>#include &lt;QObject&gt;<br>
#include &lt;QPushButton&gt;<br>#include &lt;QLabel&gt;<br>#include &lt;QHBoxLayout&gt;<br>#include &lt;QVBoxLayout&gt;<br>#include &lt;QMainWindow&gt;<br>#include &lt;QVTKWidget.h&gt;<br>#include &lt;QWidget&gt;<br>#include &lt;QString&gt;<br>
#include &lt;QFileDialog&gt;<br>#include &lt;QDir&gt;<br>#include &lt;qapplication.h&gt;<br>#include &lt;qobject.h&gt;<br>#include &lt;QtGui&gt;<br><br>#include &lt;vtkDICOMImageReader.h&gt;<br>#include &lt;vtkImageViewer2.h&gt;<br>
#include &lt;vtkRenderWindow.h&gt;<br>#include &quot;vtkRenderer.h&quot;<br>#include &quot;vtkCornerAnnotation.h&quot;<br>#include &quot;vtkImageData.h&quot;<br><br><br>using namespace std;<br><br>class test : public QObject<br>
{<br>    Q_OBJECT<br><br>public:<br>    string dirname;<br>    vtkDICOMImageReader *reader;<br>    vtkImageViewer2 *imgview;<br>    vtkImageData *blank;<br><br>    QMainWindow *mymainwindow;<br>    QWidget *centralwidget;<br>
    QLabel *mylabel;<br>    QPushButton *mypbutton;<br>    QPushButton *myloadbutton;<br>    QPushButton *myunloadbutton;<br>    QVTKWidget *vtkwidget;<br>    QHBoxLayout *myhlayout;<br>    QVBoxLayout *myvlayout;<br>    test(QObject* parent = 0);<br>
    ~test();<br><br>    public slots:<br>        void OnLoad();<br>        void OnBrowse();<br>        void OnUnLoad();<br><br>};<br><br>-----cpp file: test.cpp-------<br>#include &quot;test.h&quot;<br><br>test::test(QObject * parent):QObject(parent)<br>
{<br>    reader = vtkDICOMImageReader::New();<br>    imgview = vtkImageViewer2::New();<br>    <br>    //create dummy data to create start up blank image<br>    blank = vtkImageData::New();<br>    blank-&gt;SetDimensions(10, 10, 1);<br>
    blank-&gt;AllocateScalars();<br>    for (int i = 0; i &lt; 10; i++)<br>        for (int j = 0; j &lt; 10; j++)<br>            blank-&gt;SetScalarComponentFromDouble(i, j, 0, 0, 0);<br>    blank-&gt;Update();<br>    imgview-&gt;SetInput(blank);<br>
    imgview-&gt;SetInput(blank);<br>    //create dummy data to create start up blank image<br><br>    mymainwindow = new QMainWindow();<br>    centralwidget = new QWidget(mymainwindow);<br><br>    mylabel = new QLabel(centralwidget);<br>
    mypbutton = new QPushButton(centralwidget);<br>    myloadbutton = new QPushButton(centralwidget);<br>    myunloadbutton = new QPushButton(centralwidget);<br><br>    vtkwidget = new QVTKWidget(centralwidget);<br>    vtkwidget-&gt;GetRenderWindow()-&gt;AddRenderer(imgview-&gt;GetRenderer());<br>
    vtkwidget-&gt;setFixedSize(512,512);<br><br>    myhlayout = new QHBoxLayout();<br>    myvlayout = new QVBoxLayout();<br><br>    //setup UI<br>    mylabel-&gt;setText(&quot;Select Dicom Dir&quot;);<br>    mypbutton-&gt;setText(&quot;Browse&quot;);<br>
    this-&gt;connect(this-&gt;mypbutton,SIGNAL(clicked()),this, SLOT(OnBrowse()));<br><br>    myloadbutton-&gt;setText(&quot;Load&quot;);<br>    this-&gt;connect(this-&gt;myloadbutton,SIGNAL(clicked()),this, SLOT(OnLoad()));<br>
<br>    myunloadbutton-&gt;setText(&quot;Unload&quot;);<br>    this-&gt;connect(this-&gt;myunloadbutton,SIGNAL(clicked()),this,SLOT(OnUnLoad()));<br><br>    myhlayout-&gt;addWidget(mylabel);<br>    myhlayout-&gt;addWidget(mypbutton);<br>
    myhlayout-&gt;addWidget(myloadbutton);<br>    myhlayout-&gt;addWidget(myunloadbutton);<br><br>    myvlayout-&gt;addLayout(myhlayout);<br>    myvlayout-&gt;addWidget(vtkwidget);<br><br>    centralwidget-&gt;setLayout(myvlayout);<br>
    mymainwindow-&gt;setCentralWidget(centralwidget);<br>    mymainwindow-&gt;show();<br>}<br><br>test::~test()<br>{<br>    reader-&gt;Delete();<br>    imgview-&gt;Delete();<br>    blank-&gt;Delete();<br>}<br><br>void test::OnLoad()<br>
{<br>    reader-&gt;SetDirectoryName(dirname.c_str());<br>    reader-&gt;Update();<br>    imgview-&gt;SetInput(reader-&gt;GetOutput());<br>    imgview-&gt;GetRenderer()-&gt;ResetCamera();<br>    vtkwidget-&gt;update();<br>
}<br><br>void test::OnUnLoad()<br>{<br>    imgview-&gt;GetRenderer()-&gt;RemoveAllViewProps();<br>    imgview-&gt;GetRenderer()-&gt;ResetCamera();<br>    vtkwidget-&gt;update();<br>}<br><br>void test::OnBrowse()<br>{<br>    QString indirectory = QFileDialog::getExistingDirectory(this-&gt;centralwidget,tr(&quot;Select Input Directory&quot;), QDir::currentPath());<br>
    dirname = indirectory.toStdString();<br>}<br><br>-----main.cpp---------<br>#include &quot;test.h&quot;<br>void main(int argc, char *argv[])<br>{<br>    QApplication app(argc, argv);<br>    test *mywin = new test;<br>    app.exec();<br>
<br>}<br><br>