New minor enhancements:
-Added actions to show/hide all features of the objects -Auto adjust size slider to widest added object -Compare to both size of the scene and object to reject a too large homography -Removed descriptor/detector label on objects -Added Refresh GUI time statistic git-svn-id: http://find-object.googlecode.com/svn/trunk/find_object@416 620bd6b2-0a58-f614-fd9a-1bd335dccda9
This commit is contained in:
parent
a96ea6c4f5
commit
c879fae867
@ -98,6 +98,8 @@ private Q_SLOTS:
|
|||||||
void updateObjectsSize();
|
void updateObjectsSize();
|
||||||
void updateMirrorView();
|
void updateMirrorView();
|
||||||
void showHideControls();
|
void showHideControls();
|
||||||
|
void showObjectsFeatures();
|
||||||
|
void hideObjectsFeatures();
|
||||||
void updateObjects();
|
void updateObjects();
|
||||||
void notifyParametersChanged(const QStringList & param);
|
void notifyParametersChanged(const QStringList & param);
|
||||||
void moveCameraFrame(int frame);
|
void moveCameraFrame(int frame);
|
||||||
|
|||||||
@ -1143,8 +1143,10 @@ bool FindObject::detect(const cv::Mat & image, find_object::DetectionInfo & info
|
|||||||
// If a point is outside of 2x times the surface of the scene, homography is invalid.
|
// If a point is outside of 2x times the surface of the scene, homography is invalid.
|
||||||
for(int p=0; p<rectH.size(); ++p)
|
for(int p=0; p<rectH.size(); ++p)
|
||||||
{
|
{
|
||||||
if(rectH.at(p).x() < -image.cols || rectH.at(p).x() > image.cols*2 ||
|
if((rectH.at(p).x() < -image.cols && rectH.at(p).x() < -objectRect.width()) ||
|
||||||
rectH.at(p).y() < -image.rows || rectH.at(p).y() > image.rows*2)
|
(rectH.at(p).x() > image.cols*2 && rectH.at(p).x() > objectRect.width()*2) ||
|
||||||
|
(rectH.at(p).y() < -image.rows && rectH.at(p).x() < -objectRect.height()) ||
|
||||||
|
(rectH.at(p).y() > image.rows*2 && rectH.at(p).x() > objectRect.height()*2))
|
||||||
{
|
{
|
||||||
code= DetectionInfo::kRejectedNotValid;
|
code= DetectionInfo::kRejectedNotValid;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -160,7 +160,7 @@ MainWindow::MainWindow(FindObject * findObject, Camera * camera, QWidget * paren
|
|||||||
connect(ui_->toolBox, SIGNAL(parametersChanged(const QStringList &)), this, SLOT(notifyParametersChanged(const QStringList &)));
|
connect(ui_->toolBox, SIGNAL(parametersChanged(const QStringList &)), this, SLOT(notifyParametersChanged(const QStringList &)));
|
||||||
|
|
||||||
ui_->imageView_source->setGraphicsViewMode(true);
|
ui_->imageView_source->setGraphicsViewMode(true);
|
||||||
ui_->imageView_source->setTextLabel(tr("Press \"space\" to start the camera..."));
|
ui_->imageView_source->setTextLabel(tr("Press \"space\" to start the camera or drop an image here..."));
|
||||||
ui_->imageView_source->setMirrorView(Settings::getGeneral_mirrorView());
|
ui_->imageView_source->setMirrorView(Settings::getGeneral_mirrorView());
|
||||||
connect((QCheckBox*)ui_->toolBox->getParameterWidget(Settings::kGeneral_mirrorView()),
|
connect((QCheckBox*)ui_->toolBox->getParameterWidget(Settings::kGeneral_mirrorView()),
|
||||||
SIGNAL(stateChanged(int)),
|
SIGNAL(stateChanged(int)),
|
||||||
@ -200,6 +200,8 @@ MainWindow::MainWindow(FindObject * findObject, Camera * camera, QWidget * paren
|
|||||||
connect(ui_->actionRemove_all_objects, SIGNAL(triggered()), this, SLOT(removeAllObjects()));
|
connect(ui_->actionRemove_all_objects, SIGNAL(triggered()), this, SLOT(removeAllObjects()));
|
||||||
connect(ui_->actionSave_settings, SIGNAL(triggered()), this, SLOT(saveSettings()));
|
connect(ui_->actionSave_settings, SIGNAL(triggered()), this, SLOT(saveSettings()));
|
||||||
connect(ui_->actionLoad_settings, SIGNAL(triggered()), this, SLOT(loadSettings()));
|
connect(ui_->actionLoad_settings, SIGNAL(triggered()), this, SLOT(loadSettings()));
|
||||||
|
connect(ui_->actionShow_objects_features, SIGNAL(triggered()), this, SLOT(showObjectsFeatures()));
|
||||||
|
connect(ui_->actionHide_objects_features, SIGNAL(triggered()), this, SLOT(hideObjectsFeatures()));
|
||||||
|
|
||||||
connect(ui_->pushButton_play, SIGNAL(clicked()), this, SLOT(startProcessing()));
|
connect(ui_->pushButton_play, SIGNAL(clicked()), this, SLOT(startProcessing()));
|
||||||
connect(ui_->pushButton_stop, SIGNAL(clicked()), this, SLOT(stopProcessing()));
|
connect(ui_->pushButton_stop, SIGNAL(clicked()), this, SLOT(stopProcessing()));
|
||||||
@ -528,6 +530,22 @@ void MainWindow::showHideControls()
|
|||||||
ui_->widget_controls->setVisible(Settings::getGeneral_controlsShown());
|
ui_->widget_controls->setVisible(Settings::getGeneral_controlsShown());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::showObjectsFeatures()
|
||||||
|
{
|
||||||
|
for(QMap<int, ObjWidget*>::iterator iter=objWidgets_.begin(); iter!=objWidgets_.end(); ++iter)
|
||||||
|
{
|
||||||
|
iter.value()->setFeaturesShown(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::hideObjectsFeatures()
|
||||||
|
{
|
||||||
|
for(QMap<int, ObjWidget*>::iterator iter=objWidgets_.begin(); iter!=objWidgets_.end(); ++iter)
|
||||||
|
{
|
||||||
|
iter.value()->setFeaturesShown(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::addObjectFromScene()
|
void MainWindow::addObjectFromScene()
|
||||||
{
|
{
|
||||||
disconnect(camera_, SIGNAL(imageReceived(const cv::Mat &)), this, SLOT(update(const cv::Mat &)));
|
disconnect(camera_, SIGNAL(imageReceived(const cv::Mat &)), this, SLOT(update(const cv::Mat &)));
|
||||||
@ -553,8 +571,6 @@ void MainWindow::addObjectFromScene()
|
|||||||
objWidgets_.insert(obj->id(), obj);
|
objWidgets_.insert(obj->id(), obj);
|
||||||
ui_->actionSave_objects->setEnabled(true);
|
ui_->actionSave_objects->setEnabled(true);
|
||||||
showObject(obj);
|
showObject(obj);
|
||||||
QLabel * detectorDescriptorType = qFindChild<QLabel*>(this, QString("%1type").arg(obj->id()));
|
|
||||||
detectorDescriptorType->setText(QString("%1/%2").arg(signature->detectorType()).arg(signature->descriptorType()));
|
|
||||||
updateVocabulary();
|
updateVocabulary();
|
||||||
objectsModified_ = true;
|
objectsModified_ = true;
|
||||||
}
|
}
|
||||||
@ -747,15 +763,12 @@ void MainWindow::showObject(ObjWidget * obj)
|
|||||||
ui_->toolBox->updateParameter(Settings::kGeneral_nextObjID());
|
ui_->toolBox->updateParameter(Settings::kGeneral_nextObjID());
|
||||||
|
|
||||||
QLabel * title = new QLabel(QString("%1 (%2)").arg(obj->id()).arg(obj->keypoints().size()), this);
|
QLabel * title = new QLabel(QString("%1 (%2)").arg(obj->id()).arg(obj->keypoints().size()), this);
|
||||||
QLabel * detectorDescriptorType = new QLabel(QString("%1/%2").arg("detector").arg("descriptor"), this);
|
|
||||||
QLabel * detectedLabel = new QLabel(this);
|
QLabel * detectedLabel = new QLabel(this);
|
||||||
title->setObjectName(QString("%1title").arg(obj->id()));
|
title->setObjectName(QString("%1title").arg(obj->id()));
|
||||||
detectorDescriptorType->setObjectName(QString("%1type").arg(obj->id()));
|
|
||||||
detectedLabel->setObjectName(QString("%1detection").arg(obj->id()));
|
detectedLabel->setObjectName(QString("%1detection").arg(obj->id()));
|
||||||
QHBoxLayout * hLayout = new QHBoxLayout();
|
QHBoxLayout * hLayout = new QHBoxLayout();
|
||||||
hLayout->addWidget(title);
|
hLayout->addWidget(title);
|
||||||
hLayout->addStretch(1);
|
hLayout->addStretch(1);
|
||||||
hLayout->addWidget(detectorDescriptorType);
|
|
||||||
hLayout->addStretch(1);
|
hLayout->addStretch(1);
|
||||||
hLayout->addWidget(detectedLabel);
|
hLayout->addWidget(detectedLabel);
|
||||||
vLayout->addLayout(hLayout);
|
vLayout->addLayout(hLayout);
|
||||||
@ -764,7 +777,6 @@ void MainWindow::showObject(ObjWidget * obj)
|
|||||||
connect(obj, SIGNAL(removalTriggered(find_object::ObjWidget*)), this, SLOT(removeObject(find_object::ObjWidget*)));
|
connect(obj, SIGNAL(removalTriggered(find_object::ObjWidget*)), this, SLOT(removeObject(find_object::ObjWidget*)));
|
||||||
connect(obj, SIGNAL(destroyed(QObject *)), title, SLOT(deleteLater()));
|
connect(obj, SIGNAL(destroyed(QObject *)), title, SLOT(deleteLater()));
|
||||||
connect(obj, SIGNAL(destroyed(QObject *)), detectedLabel, SLOT(deleteLater()));
|
connect(obj, SIGNAL(destroyed(QObject *)), detectedLabel, SLOT(deleteLater()));
|
||||||
connect(obj, SIGNAL(destroyed(QObject *)), detectorDescriptorType, SLOT(deleteLater()));
|
|
||||||
connect(obj, SIGNAL(destroyed(QObject *)), vLayout, SLOT(deleteLater()));
|
connect(obj, SIGNAL(destroyed(QObject *)), vLayout, SLOT(deleteLater()));
|
||||||
ui_->verticalLayout_objects->insertLayout(ui_->verticalLayout_objects->count()-1, vLayout);
|
ui_->verticalLayout_objects->insertLayout(ui_->verticalLayout_objects->count()-1, vLayout);
|
||||||
|
|
||||||
@ -774,9 +786,18 @@ void MainWindow::showObject(ObjWidget * obj)
|
|||||||
obj->pixmap().scaledToWidth(128).save(&buffer, "JPEG"); // writes image into JPEG format
|
obj->pixmap().scaledToWidth(128).save(&buffer, "JPEG"); // writes image into JPEG format
|
||||||
imagesMap_.insert(obj->id(), ba);
|
imagesMap_.insert(obj->id(), ba);
|
||||||
|
|
||||||
|
// update objects size slider
|
||||||
|
int objectsPanelWidth = ui_->dockWidget_objects->width();
|
||||||
|
if(objectsPanelWidth > 0 && (obj->pixmap().width()*ui_->horizontalSlider_objectsSize->value()) / 100 > objectsPanelWidth)
|
||||||
|
{
|
||||||
|
ui_->horizontalSlider_objectsSize->setValue((objectsPanelWidth * 100) / obj->pixmap().width());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
updateObjectSize(obj);
|
updateObjectSize(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::updateObjects()
|
void MainWindow::updateObjects()
|
||||||
{
|
{
|
||||||
@ -795,8 +816,6 @@ void MainWindow::updateObjects()
|
|||||||
//update object labels
|
//update object labels
|
||||||
QLabel * title = qFindChild<QLabel*>(this, QString("%1title").arg(signatures[i]->id()));
|
QLabel * title = qFindChild<QLabel*>(this, QString("%1title").arg(signatures[i]->id()));
|
||||||
title->setText(QString("%1 (%2)").arg(signatures[i]->id()).arg(QString::number(signatures[i]->keypoints().size())));
|
title->setText(QString("%1 (%2)").arg(signatures[i]->id()).arg(QString::number(signatures[i]->keypoints().size())));
|
||||||
QLabel * detectorDescriptorType = qFindChild<QLabel*>(this, QString("%1type").arg(signatures[i]->id()));
|
|
||||||
detectorDescriptorType->setText(QString("%1/%2").arg(signatures[i]->detectorType()).arg(signatures[i]->descriptorType()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!camera_->isRunning() && !sceneImage_.empty())
|
if(!camera_->isRunning() && !sceneImage_.empty())
|
||||||
@ -969,9 +988,12 @@ void MainWindow::update(const cv::Mat & image)
|
|||||||
iter.value()->resetKptsColor();
|
iter.value()->resetKptsColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QTime guiRefreshTime;
|
||||||
|
|
||||||
DetectionInfo info;
|
DetectionInfo info;
|
||||||
if(findObject_->detect(sceneImage_, info))
|
if(findObject_->detect(sceneImage_, info))
|
||||||
{
|
{
|
||||||
|
guiRefreshTime.start();
|
||||||
ui_->label_timeDetection->setNum(info.timeStamps_.value(DetectionInfo::kTimeKeypointDetection, 0));
|
ui_->label_timeDetection->setNum(info.timeStamps_.value(DetectionInfo::kTimeKeypointDetection, 0));
|
||||||
ui_->label_timeSkewAffine->setNum(info.timeStamps_.value(DetectionInfo::kTimeSkewAffine, 0));
|
ui_->label_timeSkewAffine->setNum(info.timeStamps_.value(DetectionInfo::kTimeSkewAffine, 0));
|
||||||
ui_->label_timeExtraction->setNum(info.timeStamps_.value(DetectionInfo::kTimeDescriptorExtraction, 0));
|
ui_->label_timeExtraction->setNum(info.timeStamps_.value(DetectionInfo::kTimeDescriptorExtraction, 0));
|
||||||
@ -1166,6 +1188,8 @@ void MainWindow::update(const cv::Mat & image)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
guiRefreshTime.start();
|
||||||
|
|
||||||
if(findObject_->vocabulary()->size())
|
if(findObject_->vocabulary()->size())
|
||||||
{
|
{
|
||||||
this->statusBar()->showMessage(tr("Cannot search, objects must be updated!"));
|
this->statusBar()->showMessage(tr("Cannot search, objects must be updated!"));
|
||||||
@ -1217,6 +1241,8 @@ void MainWindow::update(const cv::Mat & image)
|
|||||||
lowestRefreshRate_ = 99;
|
lowestRefreshRate_ = 99;
|
||||||
refreshStartTime_.start();
|
refreshStartTime_.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui_->label_timeRefreshGUI->setNum(guiRefreshTime.elapsed());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::notifyParametersChanged(const QStringList & paramChanged)
|
void MainWindow::notifyParametersChanged(const QStringList & paramChanged)
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>881</width>
|
<width>881</width>
|
||||||
<height>523</height>
|
<height>536</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@ -251,6 +251,9 @@
|
|||||||
<property name="title">
|
<property name="title">
|
||||||
<string>View</string>
|
<string>View</string>
|
||||||
</property>
|
</property>
|
||||||
|
<addaction name="actionHide_objects_features"/>
|
||||||
|
<addaction name="actionShow_objects_features"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menu">
|
<widget class="QMenu" name="menu">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
@ -361,8 +364,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>206</width>
|
<width>222</width>
|
||||||
<height>396</height>
|
<height>409</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_objects">
|
<layout class="QVBoxLayout" name="verticalLayout_objects">
|
||||||
@ -426,9 +429,6 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
<zorder></zorder>
|
|
||||||
<zorder>verticalSpacer</zorder>
|
|
||||||
<zorder>objects_area</zorder>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
@ -514,28 +514,28 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="1">
|
<item row="9" column="1">
|
||||||
<widget class="QLabel" name="label_minMatchedDistance">
|
<widget class="QLabel" name="label_minMatchedDistance">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>000</string>
|
<string>000</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0">
|
<item row="9" column="0">
|
||||||
<widget class="QLabel" name="label_13">
|
<widget class="QLabel" name="label_13">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Min matched distance</string>
|
<string>Min matched distance</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="0">
|
<item row="10" column="0">
|
||||||
<widget class="QLabel" name="label_14">
|
<widget class="QLabel" name="label_14">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Max matched distance</string>
|
<string>Max matched distance</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="1">
|
<item row="10" column="1">
|
||||||
<widget class="QLabel" name="label_maxMatchedDistance">
|
<widget class="QLabel" name="label_maxMatchedDistance">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>000</string>
|
<string>000</string>
|
||||||
@ -619,56 +619,56 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="10" column="0">
|
<item row="11" column="0">
|
||||||
<widget class="QLabel" name="label_17">
|
<widget class="QLabel" name="label_17">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Vocabulary size</string>
|
<string>Vocabulary size</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="10" column="1">
|
<item row="11" column="1">
|
||||||
<widget class="QLabel" name="label_vocabularySize">
|
<widget class="QLabel" name="label_vocabularySize">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>000</string>
|
<string>000</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="11" column="0">
|
<item row="12" column="0">
|
||||||
<widget class="QLabel" name="label_18">
|
<widget class="QLabel" name="label_18">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>IP address</string>
|
<string>IP address</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="12" column="0">
|
<item row="13" column="0">
|
||||||
<widget class="QLabel" name="label_19">
|
<widget class="QLabel" name="label_19">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Output detection port</string>
|
<string>Output detection port</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="11" column="1">
|
<item row="12" column="1">
|
||||||
<widget class="QLabel" name="label_ipAddress">
|
<widget class="QLabel" name="label_ipAddress">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>0.0.0.0</string>
|
<string>0.0.0.0</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="12" column="1">
|
<item row="13" column="1">
|
||||||
<widget class="QLabel" name="label_port">
|
<widget class="QLabel" name="label_port">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>0</string>
|
<string>0</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="0">
|
<item row="8" column="0">
|
||||||
<widget class="QLabel" name="label_20">
|
<widget class="QLabel" name="label_20">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Objects detected</string>
|
<string>Objects detected</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="1">
|
<item row="8" column="1">
|
||||||
<widget class="QLabel" name="label_objectsDetected">
|
<widget class="QLabel" name="label_objectsDetected">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>000</string>
|
<string>000</string>
|
||||||
@ -682,14 +682,14 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="13" column="0">
|
<item row="14" column="0">
|
||||||
<widget class="QLabel" name="label_21">
|
<widget class="QLabel" name="label_21">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Input image port</string>
|
<string>Input image port</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="13" column="1">
|
<item row="14" column="1">
|
||||||
<widget class="QLabel" name="label_port_image">
|
<widget class="QLabel" name="label_port_image">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>-</string>
|
<string>-</string>
|
||||||
@ -717,6 +717,27 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="7" column="0">
|
||||||
|
<widget class="QLabel" name="label_24">
|
||||||
|
<property name="text">
|
||||||
|
<string>Refresh GUI</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="1">
|
||||||
|
<widget class="QLabel" name="label_timeRefreshGUI">
|
||||||
|
<property name="text">
|
||||||
|
<string>000</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="2">
|
||||||
|
<widget class="QLabel" name="label_25">
|
||||||
|
<property name="text">
|
||||||
|
<string>ms</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -829,6 +850,16 @@
|
|||||||
<string>Camera from TCP/IP...</string>
|
<string>Camera from TCP/IP...</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionHide_objects_features">
|
||||||
|
<property name="text">
|
||||||
|
<string>Hide objects features</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionShow_objects_features">
|
||||||
|
<property name="text">
|
||||||
|
<string>Show objects features</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user