181 lines
6.1 KiB
C++
181 lines
6.1 KiB
C++
|
|
#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);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|