#include "QImageCursorWidget.h" #include #include #include #include #include #include #include #include #include #include #include #include QImageCursorWidget::QImageCursorWidget(QWidget *parent) : QDialog(parent) { maplayer_treewidgetItem.clear(); this->initUi(); this->setWindowTitle(u8"游标窗口"); this->resize(400, 600); } QImageCursorWidget::~QImageCursorWidget() {} void QImageCursorWidget::initUi() { // 创建主布局(垂直分布) QVBoxLayout* mainLayout = new QVBoxLayout(this); // 1. 创建菜单按钮栏(这里使用QToolBar或QWidget配合QHBoxLayout模拟) QWidget* toolBarWidget = new QWidget(this); QHBoxLayout* toolBarLayout = new QHBoxLayout(toolBarWidget); toolBarLayout->setContentsMargins(0, 0, 0, 0); // 可选:移除边距使布局更紧凑 // 创建复选框按钮:“时序图”、“方向图” QCheckBox* checkBoxTimeSeries = new QCheckBox(tr(u8"时序图"), toolBarWidget); QCheckBox* checkBoxDirection = new QCheckBox(tr(u8"方向图"), toolBarWidget); // 将复选框添加到按钮栏布局 toolBarLayout->addWidget(checkBoxTimeSeries); toolBarLayout->addWidget(checkBoxDirection); toolBarLayout->addStretch(); // 添加一个弹性空间,使按钮靠左排列 // 2. 创建TreeView treewidgetResults = new QTreeWidget(this); treewidgetResults->setColumnCount(2); treewidgetResults->setHeaderLabels(QStringList() << u8"属性" << u8"值"); // 3. 将按钮栏和TreeView添加到主垂直布局中 mainLayout->addWidget(toolBarWidget); mainLayout->addWidget(treewidgetResults); // 4. (可选)设置布局的比例,例如让TreeView占据更多空间 mainLayout->setStretchFactor(toolBarWidget, 0); // 工具栏不拉伸 mainLayout->setStretchFactor(treewidgetResults, 1); // TreeView可拉伸 // 设置当前窗口的布局为主布局 this->setLayout(mainLayout); } void QImageCursorWidget::showCursor(QList result) { maplayer_treewidgetItem.clear(); treewidgetResults->clear(); treewidgetResults->setColumnCount(2); treewidgetResults->setHeaderLabels(QStringList() << u8"属性" << 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& results) { for (const QgsMapToolIdentify::IdentifyResult& result : results) { if (result.mLayer->type() == Qgis::LayerType::Raster) { addFeature(qobject_cast(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(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& attributes, const QMap& derivedAttributes, const QgsFields& fields, const QgsFeature& feature, const QMap& 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& attributes, const QMap& 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); }