UsTK : Ultrasound ToolKit  version 2.0.1 under development (2025-03-13)
tutorial-image-display-qtquickoverlay.cpp
1 
3 #include <iostream>
4 #include <visp3/ustk_core/usConfig.h>
5 
6 #if defined(VISP_HAVE_MODULE_USTK_GUI) && defined(VISP_HAVE_MODULE_USTK_TEMPLATE_TRACKING) && \
7  (defined(USTK_HAVE_VTK_QT5) || defined(USTK_HAVE_QT5))
8 
9 #include <visp3/ustk_core/usImageIo.h>
10 #include <visp3/ustk_grabber/usNetworkGrabberPreScan2D.h>
11 #include <visp3/ustk_gui/usImageDisplayWidgetQmlOverlay.h>
12 #include <visp3/ustk_gui/usTracker2DQtWrapper.h>
13 #include <visp3/ustk_gui/usUltrasonixClientWidget.h>
14 
15 #include <QApplication>
16 #include <QMainWindow>
17 
18 int main(int argc, char **argv)
19 {
20  QApplication app(argc, argv);
21  app.setApplicationName(QString("USTK tracking 2D demo"));
22 
24 
25  usUltrasonixClientWidget *ultrasonixControlWidet = new usUltrasonixClientWidget();
26 
27  QWidget *centralWidget = new QWidget();
28  QHBoxLayout *mainLayout = new QHBoxLayout();
29  mainLayout->addWidget(ultrasonixControlWidet);
30  mainLayout->addWidget(widget, 3);
31  // mainLayout->addWidget(robotControlPanel);
32  centralWidget->setLayout(mainLayout);
33 
34  // grabber
35  QThread *grabbingThread = new QThread();
37  qtGrabber->moveToThread(grabbingThread);
38  grabbingThread->start();
39 
40  usTracker2DQtWrapper *tracker = new usTracker2DQtWrapper();
41 
42  // controls to start / stop tracking
43  QObject::connect(widget, SIGNAL(startTracking(vpRectOriented)), tracker, SLOT(initTracker(vpRectOriented)));
44  QObject::connect(widget, SIGNAL(stopTracking()), tracker, SLOT(stopTracking()));
45 
46  // grabber control
47  qRegisterMetaType<QHostAddress>("QHostAddress");
48  qRegisterMetaType<usNetworkGrabber::usInitHeaderSent>("usNetworkGrabber::usInitHeaderSent");
49  QObject::connect(ultrasonixControlWidet, SIGNAL(connectToServer(QHostAddress)), qtGrabber,
50  SLOT(connectToServer(QHostAddress)));
51  QObject::connect(ultrasonixControlWidet, SIGNAL(initAcquisition(usNetworkGrabber::usInitHeaderSent)), qtGrabber,
52  SLOT(initAcquisitionSlot(usNetworkGrabber::usInitHeaderSent)));
53  QObject::connect(ultrasonixControlWidet, SIGNAL(center3DProbeMotor()), qtGrabber, SLOT(center3DProbeMotor()));
54  QObject::connect(ultrasonixControlWidet, SIGNAL(runAcquisition()), qtGrabber, SLOT(runAcquisition()));
55  QObject::connect(ultrasonixControlWidet, SIGNAL(stopAcquisition()), qtGrabber, SLOT(stopAcquisition()));
56 
57  // send new images via qt signal
58  qRegisterMetaType<usImagePreScan2D<unsigned char> >("usImagePreScan2D<unsigned char>");
59  QObject::connect(qtGrabber, SIGNAL(newFrame(usImagePreScan2D<unsigned char>)), widget,
60  SLOT(updateFrame(usImagePreScan2D<unsigned char>)));
61  QObject::connect(qtGrabber, SIGNAL(newFrame(usImagePreScan2D<unsigned char>)), tracker,
62  SLOT(updateImage(usImagePreScan2D<unsigned char>)));
63 
64  // updates the GUI based on the tracking output
65  QObject::connect(tracker, SIGNAL(newTrackedRectangle(vpRectOriented)), widget,
66  SLOT(updateRectPosition(vpRectOriented)));
67 
68  QMainWindow window;
69  window.setCentralWidget(centralWidget);
70  window.resize(640, 480);
71  window.show();
72 
73  return app.exec();
74 }
75 
76 #else
77 int main()
78 {
79  std::cout << "You should build ustk_gui and ustk_template_tracking and use Qt5 library to run this tutorial"
80  << std::endl;
81  return 0;
82 }
83 
84 #endif
Qt widget class for 2D ultrasound image display, containing robot control tools.
Specific class to grab pre-scan frames from the ultrasound station on the network.