Hi,

it looks like you are trying to use a QTextCursor object as an argument 
in a Qt slot wich you are connecting to a signal via a queued 
connection. Since QTextCursor is not a type known natively to the Qt 
meta-object system, you need to call qRegisterMetaType for QTextCursor 
yourself, like the error message suggests. This is really a Qt related 
issue.

Best,
Sascha

On 04/28/2015 02:07 PM, Gomez, Alberto wrote:
> Dear all,
>
> I am trying to display a stream of images that I have access to at a
> certain frame rate. For simplicity, let's assume they are 2D images,
> they all have the same size/extent etc and only the actual pixel data
> changes.
>
> I have been looking at the US module, and particularly at
> UltrasoundSupport.cpp, Where they do the following:
>
> void UltrasoundSupport::DisplayImage()
> {
> //Update device
> m_Device->Modified();
> m_Device->Update();
>
> //Only update the view if the image is shown
> if(m_Controls.m_ShowImageStream->isChecked())
> {
>     //Update data node
>     mitk::Image::Pointer curOutput = m_Device->GetOutput();
>     m_Node->SetData(curOutput);
>
>     // if the geometry changed: reinitialize the ultrasound image
>     if((m_OldGeometry.IsNotNull()) &&
>        (curOutput->GetGeometry() != NULL) &&
> (!mitk::Equal(m_OldGeometry.GetPointer(),curOutput->GetGeometry(),0.0001,false))
>       )
>     {
>       mitk::IRenderWindowPart* renderWindow = this->GetRenderWindowPart();
>       if ( (renderWindow != NULL) &&
> (curOutput->GetTimeGeometry()->IsValid()) &&
> (m_Controls.m_ShowImageStream->isChecked()) )
>       {
>         renderWindow->GetRenderingManager()->InitializeViews(
>         curOutput->GetGeometry(),
> mitk::RenderingManager::REQUEST_UPDATE_ALL, true );
>         renderWindow->GetRenderingManager()->RequestUpdateAll();
>       }
>       m_CurrentImageWidth = curOutput->GetDimension(0);
>       m_CurrentImageHeight = curOutput->GetDimension(1);
>       m_OldGeometry =
> dynamic_cast<mitk::SlicedGeometry3D*>(curOutput->GetGeometry());
>     }
>     //if not: only update the view
>     else
>     {
>       this->RequestRenderWindowUpdate();
>     }
> }
>
> I am basically doing the same thing, with just minor differences due to
> my data structure:
>
>
> void StreamingView::ImagingHandler(LayerObject::Pointer tlo){
>
> DNLDataHandler::Pointer dataHandler =  DNLDataHandler::Pointer(new
> DNLDataHandler());
>
>       std::vector< vtkSmartPointer<vtkImageData> > imageData;
>       {
>           imageData = dataHandler->createImage(tlo);
>       }
>       if (!imageData.size()){
>           return;
>       }
>
>       this->m_FrameCounter++;
>
>       /// Add the data to the viewer
>       {
>
>           /// Option 1: attempt to get data from my RT source
>           mitk::Image::Pointer mitkImage = mitk::Image::New();
>           mitkImage->Initialize(imageData[0]);
> mitkImage->SetVolume(imageData[0]->GetScalarPointer());
>           this->m_Node->SetData(mitkImage);
>
>           /// Option 2: generate a random image
>           // mitk::Image::Pointer dummyImage =
> mitk::ImageGenerator::GenerateRandomImage<float>(100, 100, 100, 1, 1, 1,
> 1, 255,0);
>           // this->m_Node->SetData(dummyImage);
>
>            if((this->m_OldGeometry.IsNotNull()) &&
> (mitkImage->GetGeometry() != NULL) &&
> (!mitk::Equal(m_OldGeometry.GetPointer(),mitkImage->GetGeometry(),0.0001,false)))
> {
>               mitk::IRenderWindowPart* renderWindow =
> this->GetRenderWindowPart();
>               if ( (renderWindow != NULL) &&
> (mitkImage->GetTimeGeometry()->IsValid()) ) // &&
> (this->m_Controls.m_ShowImageStream->isChecked()) )
>               {
> renderWindow->GetRenderingManager()->InitializeViews(
>                               mitkImage->GetGeometry(),
> mitk::RenderingManager::REQUEST_UPDATE_ALL, true );
> renderWindow->GetRenderingManager()->RequestUpdateAll();
>               }
>               this->m_OldGeometry =
> dynamic_cast<mitk::SlicedGeometry3D*>(mitkImage->GetGeometry());
>           }
>           else
>           { //if not: only update the view
>               this->RequestRenderWindowUpdate();
> mitk::RenderingManager::GetInstance()->RequestUpdateAll();
>           }
>
>       }
> }
>
> The above function is called every time there is a new image available,
> which happens roughly every 50 ms. Unfortunately when I run  my plugin,
> the app crashes giving the following error:
>
> [Tue Apr 28 12:55:13 20150.573] Logfile:
> xxxxxxxxxxxxxxxxxxx/data/13/mitk-0.log
> [1.036] [BlueBerry] LOG: Warning: Detected recursive attempt by part
> org.mitk.views.datamanager to create itself (this is probably, but not
> necessarily, a bug)
> [1.209] [BlueBerry] BlueBerry Workbench ready
> QObject::connect: Cannot queue arguments of type 'QTextCursor'
> (Make sure 'QTextCursor' is registered using qRegisterMetaType().)
> Aborted (core dumped)
>
> Now, if I add a line
>       std::this_thread::sleep_for(std::chrono::milliseconds(1000));
> just before this->m_Node->SetData(mitkImage);
>
> It does not crash for a little while, shows me the images flowing
> through (for some reason the coronal view does not update , although the
> coronal slice in the 3D view does ) but after  a few seconds, or if I
> try to interact with any of the views, the app crashes with the same
> error as above.
>
> I do not think the error is related to my data source because if I
> comment Option1 above and uncomment Option 2 I get the same result.
>
>
> Sometimes (not always) I additionally get an extra error bit:
>
> [1.178] [BlueBerry] BlueBerry Workbench ready
> QObject::connect: Cannot queue arguments of type 'QTextCursor'
> (Make sure 'QTextCursor' is registered using qRegisterMetaType().)
> [xcb] Unknown request in queue while dequeuing
> [xcb] Most likely this is a multi-threaded client and XInitThreads has
> not been called
> [xcb] Aborting, sorry about that.
> MyApp: ../../src/xcb_io.c:179: dequeue_pending_request: Assertion
> `!xcb_xlib_unknown_req_in_deq' failed.
> Aborted (core dumped)
>
> Any advice/help?
>
> Thanks a lot!
>
>
>
>
>


------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
mitk-users mailing list
mitk-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mitk-users

Reply via email to