Common Vision Blox 15.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Friends Modules Pages
Image Manager/Cvb++/QtPropertyGrid

This example program is located in your CVB installation under %CVB%Tutorial/Image Manager/Cvb++/QtPropertyGrid.

main.cpp:

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
#include <iostream>
#pragma warning(push)
#pragma warning(disable : 4127)
#include <QApplication>
#include <QVBoxLayout>
#include <QTextEdit>
#pragma warning(pop)
#include <cvb/ui/property_grid.hpp>
#include <cvb/device_factory.hpp>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
auto path = Cvb::InstallPath();
path += CVB_LIT("drivers/GenICam.vin");
// use command line argument if provided.
if (argc > 1)
{
std::string inputPath(argv[1]);
path = Cvb::String(inputPath.begin(), inputPath.end());
}
Cvb::DevicePtr dev = nullptr;
try
{
// open a device
dev = Cvb::DeviceFactory::Open(Cvb::ExpandPath(path), Cvb::AcquisitionStack::Vin);
}
catch (const std::exception& error)
{
std::cout << "Failed to open the device: " << error.what() << std::endl;
return 1;
}
try
{
// Qt Window and layout
auto mainWindow = new QWidget;
mainWindow->setWindowIcon(QIcon(":/qttutorial.png"));
auto layout = new QVBoxLayout;
// Get all nodemaps
auto nodemaps = dev->NodeMaps();
// Node map selection
auto cbNodeMaps = new QComboBox;
for (std::map<Cvb::String, Cvb::NodeMapPtr>::iterator it = nodemaps.begin(); it != nodemaps.end(); ++it)
cbNodeMaps->addItem(Cvb::UI::CvbToQt(it->first));
layout->addWidget(cbNodeMaps);
// Visibility selection
auto cbVisibility = new QComboBox;
cbVisibility->addItem("Beginner");
cbVisibility->addItem("Expert");
cbVisibility->addItem("Guru");
layout->addWidget(cbVisibility);
// Show the camera node map / property grid
auto grid = new Cvb::UI::PropertyGrid(dev->NodeMap(CVB_LIT("Device")));
grid->SetVisibility(Cvb::Visibility::Beginner);
layout->addWidget(grid);
// Property information
auto propertyInfo = new QTextEdit;
propertyInfo->setReadOnly(true);
layout->addWidget(propertyInfo);
// Set search result color
grid->SetSearchResultBackgroundColor(QColor(255, 255, 150));
// Provide a search for a specific property
auto searchLayout = new QHBoxLayout;
searchLayout->addWidget(new QLabel("Search:"));
auto search = new QLineEdit;
search->setPlaceholderText("Search property...");
searchLayout->addWidget(search);
layout->addLayout(searchLayout);
// Update button to refresh the properties
auto updateButton = new QPushButton("Update");
layout->addWidget(updateButton);
// Auto update (start / stop) for automatic update of properties (e.g. Statistics)
auto startAutoUpdate = new QPushButton("AutoUpdate START");
layout->addWidget(startAutoUpdate);
auto stopAutoUpdate = new QPushButton("AutoUpdate STOP");
layout->addWidget(stopAutoUpdate);
auto autoUpdateButtonLayout = new QHBoxLayout;
autoUpdateButtonLayout->addWidget(startAutoUpdate);
autoUpdateButtonLayout->addWidget(stopAutoUpdate);
layout->addLayout(autoUpdateButtonLayout);
// Signal - slots
// ---------------
// Nodemap selection
QObject::connect(cbNodeMaps, QOverload<int>::of(&QComboBox::currentIndexChanged), [=](int /*index*/)
{
// Set the selected nodemap
grid->SetNodeMap(nodemaps.at(Cvb::UI::QtToCvb(cbNodeMaps->currentText())));
// Reset the search text
search->setText("");
grid->ResetSearch();
});
// Visibility selection
QObject::connect(cbVisibility, QOverload<int>::of(&QComboBox::currentIndexChanged), [=](int index)
{
// Set the selected visibility
switch (index)
{
case 0: grid->SetVisibility(Cvb::Visibility::Beginner); break;
case 1: grid->SetVisibility(Cvb::Visibility::Expert); break;
case 2: grid->SetVisibility(Cvb::Visibility::Guru); break;
}
});
// Property selection provides info on the property in the propertyInfo field
QObject::connect(grid, &Cvb::UI::PropertyGrid::clicked, [=](const QModelIndex & index)
{
propertyInfo->setText(grid->HtmlFormattedDescription(index));
});
// Start the search for a property
QObject::connect(search, &QLineEdit::returnPressed, [=]()
{
if (search->text().isEmpty())
{
grid->ResetSearch();
return;
}
auto found = grid->Search(search->text());
grid->ExpandSearchResult(found);
});
// Update the property grid
QObject::connect(updateButton, &QPushButton::clicked, [=]()
{
grid->update();
});
// Start the automatic update
QObject::connect(startAutoUpdate, &QPushButton::clicked, [=]()
{
grid->StartAutoUpdate(5000); // every 5 seconds
});
// Stop the automatic update
QObject::connect(stopAutoUpdate, &QPushButton::clicked, [=]()
{
grid->StopAutoUpdate();
});
mainWindow->setLayout(layout);
mainWindow->setAttribute(Qt::WA_DeleteOnClose);
mainWindow->show();
return app.exec();
}
catch (const std::exception& error)
{
std::cout << error.what() << std::endl;
return 1;
}
}
static std::shared_ptr< T > Open(const String &provider, AcquisitionStack acquisitionStack=AcquisitionStack::PreferVin)
Cvb::String QtToCvb(const QString text) noexcept
QString CvbToQt(const Cvb::String &text) noexcept
String ExpandPath(const String &path)
std::string String
std::shared_ptr< Device > DevicePtr
String InstallPath()