Manual-Labeling-Tool/Manual-Labeling-Client/Manual-Label-Tool-Widget/QImageCursorWidget.cpp

181 lines
6.1 KiB
C++
Raw Normal View History

2025-11-20 09:32:46 +00:00
#include "QImageCursorWidget.h"
#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QWidget>
#include <memory>
#include <qgsrasteridentifyresult.h>
#include <qgsmapcanvas.h>
#include <QCheckBox>
#include <QTreeView>
#include <qgsraster.h>
#include <qgsrasterlayer.h>
#include <qgsmeshlayer.h>
QImageCursorWidget::QImageCursorWidget(QWidget *parent)
: QDialog(parent)
{
maplayer_treewidgetItem.clear();
this->initUi();
this->setWindowTitle(u8"<EFBFBD>α<EFBFBD><EFBFBD>");
this->resize(400, 600);
}
QImageCursorWidget::~QImageCursorWidget()
{}
void QImageCursorWidget::initUi()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD>ֱ<EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
QVBoxLayout* mainLayout = new QVBoxLayout(this);
// 1. <20><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>QToolBar<61><72>QWidget<65><74><EFBFBD><EFBFBD>QHBoxLayoutģ<74>
QWidget* toolBarWidget = new QWidget(this);
QHBoxLayout* toolBarLayout = new QHBoxLayout(toolBarWidget);
toolBarLayout->setContentsMargins(0, 0, 0, 0); // <20><>ѡ<EFBFBD><D1A1><EFBFBD>Ƴ<EFBFBD><C6B3>߾<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
QCheckBox* checkBoxTimeSeries = new QCheckBox(tr(u8"ʱ<EFBFBD><EFBFBD>ͼ"), toolBarWidget);
QCheckBox* checkBoxDirection = new QCheckBox(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ"), toolBarWidget);
// <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
toolBarLayout->addWidget(checkBoxTimeSeries);
toolBarLayout->addWidget(checkBoxDirection);
toolBarLayout->addStretch(); // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Կռʹ<E4A3AC><CAB9>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 2. <20><><EFBFBD><EFBFBD>TreeView
treewidgetResults = new QTreeWidget(this);
treewidgetResults->setColumnCount(2);
treewidgetResults->setHeaderLabels(QStringList() << u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << u8"ֵ");
// 3. <20><><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>TreeView<65><77><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mainLayout->addWidget(toolBarWidget);
mainLayout->addWidget(treewidgetResults);
// 4. <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2>ֵı<D6B5><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TreeViewռ<77>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD>ռ<EFBFBD>
mainLayout->setStretchFactor(toolBarWidget, 0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mainLayout->setStretchFactor(treewidgetResults, 1); // TreeView<65><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڵIJ<DAB5><C4B2><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
this->setLayout(mainLayout);
}
void QImageCursorWidget::showCursor(QList<QgsMapToolIdentify::IdentifyResult> result)
{
maplayer_treewidgetItem.clear();
treewidgetResults->clear();
treewidgetResults->setColumnCount(2);
treewidgetResults->setHeaderLabels(QStringList() << u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << u8"ֵ");
int32_t layerCount = result.count();
for (int32_t i = 0; i < layerCount; i++) {
if (result[i].mLayer->type() == Qgis::LayerType::Raster) {
}
else if (result[i].mLayer->type() == Qgis::LayerType::Mesh) {
}
}
this->populateTreeWidget(result);
}
void QImageCursorWidget::populateTreeWidget(const QList<QgsMapToolIdentify::IdentifyResult>& results)
{
for (const QgsMapToolIdentify::IdentifyResult& result : results) {
if (result.mLayer->type() == Qgis::LayerType::Raster) {
addFeature(qobject_cast<QgsRasterLayer*>(result.mLayer), result.mLabel, result.mAttributes, result.mDerivedAttributes, result.mFields, result.mFeature, result.mParams);
}
else if (result.mLayer->type() == Qgis::LayerType::Mesh) {
addFeature(qobject_cast<QgsMeshLayer*>(result.mLayer), result.mLabel, result.mAttributes, result.mDerivedAttributes);
}
else {
}
}
treewidgetResults->expandAll();
}
void QImageCursorWidget::addKeyValuePair(QTreeWidgetItem* parent, const QString& key, const QString& value)
{
QTreeWidgetItem* item = new QTreeWidgetItem(parent);
item->setText(0, key);
item->setText(1, value);
}
QTreeWidgetItem* QImageCursorWidget::layerItem(QgsMapLayer* layer)
{
QTreeWidgetItem* layItem = nullptr;
if (maplayer_treewidgetItem.contains(layer)) {
layItem = maplayer_treewidgetItem[layer];
treewidgetResults->addTopLevelItem(layItem);
}
else {
layItem = new QTreeWidgetItem(treewidgetResults);
layItem->setText(0, layer->name());
maplayer_treewidgetItem.insert(layer, layItem);
treewidgetResults->addTopLevelItem(layItem);
}
return layItem;
}
void QImageCursorWidget::addFeature(QgsRasterLayer* layer,
const QString& label, const QMap<QString, QString>& attributes,
const QMap<QString, QString>& derivedAttributes, const QgsFields& fields,
const QgsFeature& feature, const QMap<QString, QVariant>& params)
{
QTreeWidgetItem* layItem = layerItem(layer);
QTreeWidgetItem* labelNode = new QTreeWidgetItem();
labelNode->setText(0, label);
// attributes
for (auto it = attributes.begin(); it != attributes.end(); ++it) {
QTreeWidgetItem* tempnode = new QTreeWidgetItem();
tempnode->setText(0, it.key());
tempnode->setText(1, it.value());
labelNode->addChild(tempnode);
}
layItem->addChild(labelNode);
// derivedAttributes
QTreeWidgetItem* driverNode = new QTreeWidgetItem();
for (auto it = derivedAttributes.begin(); it != derivedAttributes.end(); ++it) {
QTreeWidgetItem* tempnode = new QTreeWidgetItem();
tempnode->setText(0, it.key());
tempnode->setText(1, it.value());
driverNode->addChild(tempnode);
}
layItem->addChild(driverNode);
}
void QImageCursorWidget::addFeature(QgsMeshLayer* layer, const QString& label, const QMap<QString, QString>& attributes, const QMap<QString, QString>& derivedAttributes)
{
QTreeWidgetItem* layItem = layerItem(layer);
QTreeWidgetItem* labelNode = new QTreeWidgetItem();
labelNode->setText(0, label);
// attributes
for (auto it = attributes.begin(); it != attributes.end(); ++it) {
QTreeWidgetItem* tempnode = new QTreeWidgetItem();
tempnode->setText(0, it.key());
tempnode->setText(1, it.value());
labelNode->addChild(tempnode);
}
layItem->addChild(labelNode);
// derivedAttributes
QTreeWidgetItem* driverNode = new QTreeWidgetItem();
driverNode->setText(0, u8"(derivedAttributes)");
for (auto it = derivedAttributes.begin(); it != derivedAttributes.end(); ++it) {
QTreeWidgetItem* tempnode = new QTreeWidgetItem();
tempnode->setText(0, it.key());
tempnode->setText(1, it.value());
driverNode->addChild(tempnode);
}
layItem->addChild(driverNode);
}