Qt浅谈之五十二显示shape表格并自动搜索图片

2024-03-11 10:08

本文主要是介绍Qt浅谈之五十二显示shape表格并自动搜索图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

        Qt版本(Qt_5_9_5_MinGW_32bit,Qt更高版本是64位需要编译第三方64位库)下,加载shape文件并显示,然后点击对应的图片字段弹出图片,使用于特殊环境下图片的筛选。同时也要处理显示的中文乱码问题。完整代码已上传csdn。

二、详解

1、代码

(1)dispalypic.h

#ifndef DISPALYPIC_H
#define DISPALYPIC_H#include <QDialog>
#include "ogrsf_frmts.h"namespace Ui {
class dispalypic;
}class dispalypic : public QDialog
{Q_OBJECTpublic:explicit dispalypic(QWidget *parent = nullptr);~dispalypic();bool setPath(QString shp_file, QString pic_path);private slots:void slotDoubleClicked(int row, int column);private:bool parse_shp_file();QString utf8_to_gbk(const char *source);private:Ui::dispalypic *ui;QString m_shp_path;QString m_pic_path;
};#endif // DISPALYPIC_H

(2)dispalypic.cpp

#include <QDir>
#include <QProcess>
#include <QTextCodec>
#include "dispalypic.h"
#include "ui_dispalypic.h"dispalypic::dispalypic(QWidget *parent) :QDialog(parent),ui(new Ui::dispalypic)
{ui->setupUi(this);this->setFixedSize(1600, 800);ui->tableWidget->setFixedSize(1600, 800);//ui->tableWidget->horizontalHeader()->setStretchLastSection(true);//ui->tableWidget->verticalHeader()->setStretchLastSection(true);ui->tableWidget->resizeColumnsToContents();ui->tableWidget->resizeRowsToContents();ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);ui->tableWidget->horizontalHeader()->setMinimumSectionSize(100);ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);connect(ui->tableWidget,SIGNAL(cellDoubleClicked(int,int)),this,SLOT(slotDoubleClicked(int,int)));
}dispalypic::~dispalypic()
{delete ui;
}bool dispalypic::setPath(QString shp_file, QString pic_path)
{m_shp_path = shp_file;m_pic_path = pic_path;return parse_shp_file();
}bool dispalypic::parse_shp_file()
{const char *pszDriverName = "ESRI Shapefile"; CPLSetConfigOption( "GDAL_FILENAME_IS_UTF8","NO" );CPLSetConfigOption( "SHAPE_ENCODING", "UTF-8");RegisterOGRShape();//OGRRegisterAll();OGRSFDriverRegistrar* pReg = OGRSFDriverRegistrar::GetRegistrar();OGRSFDriver* poDriver = pReg->GetDriverByName(pszDriverName);if (!poDriver){return false;}OGRDataSource *poDS = poDriver->Open( m_shp_path.toLocal8Bit().data(), FALSE );if (!poDS)  return false;OGRLayer *poLayer = poDS->GetLayer(0);poLayer->ResetReading();OGRFeatureDefn *m_FDef = poLayer->GetLayerDefn();QStringList header;for(int index= 0; index < m_FDef->GetFieldCount(); index++ ){OGRFieldDefn *m_Field = m_FDef->GetFieldDefn( index );//printf( "--------%s", m_Field->GetNameRef() );//const char *data = m_Field->GetNameRef();QString v_data = utf8_to_gbk(m_Field->GetNameRef());header.append(v_data);}ui->tableWidget->setColumnCount(m_FDef->GetFieldCount());ui->tableWidget->setHorizontalHeaderLabels(header);//printf( "\n");poLayer->ResetReading();OGRFeature *poFeature = NULL;int m_record_lines = 0;ui->tableWidget->setRowCount(poLayer->GetFeatureCount());while( (poFeature = poLayer->GetNextFeature()) != NULL ){OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();for(int iField = 0; iField < poFDefn->GetFieldCount(); iField++ ){
//            OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn( iField );
//            printf( "--------%s\n", poFieldDefn->GetNameRef() );//根据字段值得类型,选择对应的输出
//            if( poFieldDefn->GetType() == OFTInteger )
//                printf( "%d,", poFeature->GetFieldAsInteger( iField ) );
//            else if( poFieldDefn->GetType() == OFTReal )
//                printf( "%.3f,", poFeature->GetFieldAsDouble(iField) );
//            else if( poFieldDefn->GetType() == OFTString )
//                printf( "%s,", poFeature->GetFieldAsString(iField) );
//            else
//                printf( "%s,", poFeature->GetFieldAsString(iField) );//QString v_data = QStringLiteral("%1").arg(poFeature->GetFieldAsString(iField));QString v_data = utf8_to_gbk(poFeature->GetFieldAsString(iField));ui->tableWidget->setItem(m_record_lines,iField,new QTableWidgetItem(v_data));}m_record_lines++;OGRFeature::DestroyFeature( poFeature );}OGRDataSource::DestroyDataSource( poDS );return true;
}void dispalypic::slotDoubleClicked(int row, int column)
{QString v_text = ui->tableWidget->item(row, column)->text().trimmed();if (v_text.contains("jpg", Qt::CaseInsensitive) || v_text.contains("png", Qt::CaseInsensitive)){QString v_file = QStringLiteral("%1\\%2").arg(m_pic_path).arg(v_text);if (QFile::exists(v_file)){QProcess::startDetached("C:\\Program Files (x86)\\HDPicViewer\\HDPicViewer.exe", QStringList(v_file));}}
}QString dispalypic::utf8_to_gbk(const char *source)
{QTextCodec::ConverterState state;QTextCodec *codec = QTextCodec::codecForName("UTF-8");QString text = codec->toUnicode( source, strlen(source), &state);if (state.invalidChars > 0){text = QTextCodec::codecForName( "GBK" )->toUnicode(source);}else{text = source;}return text;
}

 

2、编译运行


三、总结

(1)上述代码只是为了解决工作中的问题,具体的业务代码需自己扩展。需要下载:HD图片查看器1.2.0.22.ex,图片浏览工具。

(2)完整的代码已上传到csdn上:https://download.csdn.net/download/taiyang1987912/11914388
(3)若有问题或建议,请留言,在此感谢!

这篇关于Qt浅谈之五十二显示shape表格并自动搜索图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797502

相关文章

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注