Merge pull request 'RFPC-dev:发布最新版本' (#14) from RFPC-dev into Release

Reviewed-on: http://123.153.4.249:22779/LAMPSARToolSoftware/RasterProcessTool/pulls/14
Release
chenzenghui 2025-04-29 11:52:50 +08:00
commit ab654ed02b
20 changed files with 1460 additions and 1380 deletions

View File

@ -20,16 +20,6 @@
namespace LAMPMainWidget { namespace LAMPMainWidget {
QString
RasterMainWidget::tutorialUrl() {
return QString{R"(https://gitee.com/qizr_admin/LAMPMainWidget)"};
}
QString
RasterMainWidget::srcUrl() {
return QString{R"(https://gitee.com/qizr_admin/LAMPMainWidget)"};
}
QHash<QString, MapLayer*>RasterMainWidget::mMaps{}; QHash<QString, MapLayer*>RasterMainWidget::mMaps{};
RasterMainWidget::RasterMainWidget(QWidget* parent) RasterMainWidget::RasterMainWidget(QWidget* parent)
@ -55,12 +45,24 @@ RasterMainWidget::RasterMainWidget(QWidget *parent)
setupActions(); setupActions();
setRightToolbox(); setRightToolbox();
//mUi->panAction->trigger(); mUi->panAction->trigger();
//mUi->layerList->setCurrentItem(mLayerList.first()); mUi->layerList->setCurrentItem(mLayerList.first());
this->show();// 强制显示窗口
// 绑定消息显示
RasterMessageShow::RasterWidgetMessageShow* messageshow = RasterMessageShow::RasterWidgetMessageShow::getInstance(this);
messageshow->bandingTextBrowserMessage(this->mUi->textBrowserMessage);
connect(mUi->actioncloseAllRasterFile, SIGNAL(triggered()), this, SLOT(onactioncloseAllRasterFile_triggered())); connect(mUi->actioncloseAllRasterFile, SIGNAL(triggered()), this, SLOT(onactioncloseAllRasterFile_triggered()));
this->mUi->toolBar->hide();
this->mUi->dockWidget_Map->hide();
this->mUi->dockWidget->hide();
this->mUi->statusbar->hide();
this->mUi->dockWidget_2->hide();
this->mUi->dockWidget_3->hide();
} }
RasterMainWidget::~RasterMainWidget() { RasterMainWidget::~RasterMainWidget() {
@ -93,8 +95,7 @@ RasterMainWidget::setupActions() {
QObject::connect(mUi->panAction, &QAction::triggered, this, &RasterMainWidget::panHandle); QObject::connect(mUi->panAction, &QAction::triggered, this, &RasterMainWidget::panHandle);
QObject::connect(mUi->zoomInAction, &QAction::triggered, this, &RasterMainWidget::zoomInHandle); QObject::connect(mUi->zoomInAction, &QAction::triggered, this, &RasterMainWidget::zoomInHandle);
QObject::connect(mUi->zoomOutAction, &QAction::triggered, this, &RasterMainWidget::zoomOutHandle); QObject::connect(mUi->zoomOutAction, &QAction::triggered, this, &RasterMainWidget::zoomOutHandle);
QObject::connect(mUi->tutorialAction, &QAction::triggered, this, &RasterMainWidget::tutorialHanle);
QObject::connect(mUi->srcAction, &QAction::triggered, this, &RasterMainWidget::srcHandle);
QObject::connect(mUi->refreshAction, &QAction::triggered, this, &RasterMainWidget::refreshHandle); QObject::connect(mUi->refreshAction, &QAction::triggered, this, &RasterMainWidget::refreshHandle);
QObject::connect(mUi->sponsorAction, &QAction::triggered, this, &RasterMainWidget::sponsorHandle); QObject::connect(mUi->sponsorAction, &QAction::triggered, this, &RasterMainWidget::sponsorHandle);
QObject::connect(mUi->selectAction, &QAction::triggered, this, &RasterMainWidget::selectHandle); QObject::connect(mUi->selectAction, &QAction::triggered, this, &RasterMainWidget::selectHandle);
@ -113,12 +114,6 @@ void RasterMainWidget::setupWindow() {
QObject::connect(mUi->layerList, &QListWidget::currentItemChanged, this, &RasterMainWidget::layerChanged); QObject::connect(mUi->layerList, &QListWidget::currentItemChanged, this, &RasterMainWidget::layerChanged);
QObject::connect(mUi->leftTopBtn, &QPushButton::clicked, this, &RasterMainWidget::leftTopClickedHandle); QObject::connect(mUi->leftTopBtn, &QPushButton::clicked, this, &RasterMainWidget::leftTopClickedHandle);
QObject::connect(mUi->rightBottomBtn, &QPushButton::clicked, this, &RasterMainWidget::rightBottomClickedHandle); QObject::connect(mUi->rightBottomBtn, &QPushButton::clicked, this, &RasterMainWidget::rightBottomClickedHandle);
RasterMessageShow::RasterWidgetMessageShow* messageshow = RasterMessageShow::RasterWidgetMessageShow::getInstance(this);
messageshow->bandingTextBrowserMessage(this->mUi->textBrowserMessage);
} }
void RasterMainWidget::setupStatusBar() { void RasterMainWidget::setupStatusBar() {
@ -164,7 +159,7 @@ void RasterMainWidget::setupLayers() {
void void
RasterMainWidget::initMaps() { RasterMainWidget::initMaps() {
if (mMaps.isEmpty()) { if (false&&mMaps.isEmpty()) {
mMaps = QHash<QString, MapLayer*>{ mMaps = QHash<QString, MapLayer*>{
{"Openstreet地图", new TmsLayer(OSTNormalMap, "ostnormalmap", mMapConvas)}, {"Openstreet地图", new TmsLayer(OSTNormalMap, "ostnormalmap", mMapConvas)},
{"高德地图", new TmsLayer(GaodeNormapMap, "gaodenormalmap", mMapConvas)} {"高德地图", new TmsLayer(GaodeNormapMap, "gaodenormalmap", mMapConvas)}
@ -222,19 +217,7 @@ void RasterMainWidget::drawlineHandle(bool checked)
mMapConvas->selectTool("drawline_tool"); mMapConvas->selectTool("drawline_tool");
} }
void
RasterMainWidget::tutorialHanle(bool checked) {
if (!QDesktopServices::openUrl(tutorialUrl())) {
QMessageBox::critical(dynamic_cast<QWidget *>(this), "异常", "未能打开系统浏览器");
}
}
void
RasterMainWidget::srcHandle(bool checked) {
if (!QDesktopServices::openUrl(srcUrl())) {
QMessageBox::critical(dynamic_cast<QWidget *>(this), "异常", "未能打开系统浏览器");
}
}
void void
RasterMainWidget::sponsorHandle(bool checked) { RasterMainWidget::sponsorHandle(bool checked) {
@ -270,7 +253,8 @@ RasterMainWidget::clickedHandle(LAMPMainWidget::PointXY pos) {
if (mSetLeftTop) { if (mSetLeftTop) {
mUi->leftTopText->setText(posText); mUi->leftTopText->setText(posText);
mLeftTop = pos; mLeftTop = pos;
} else { }
else {
mUi->rightBottomText->setText(posText); mUi->rightBottomText->setText(posText);
mRightBottom = pos; mRightBottom = pos;
} }

View File

@ -52,8 +52,7 @@ namespace LAMPMainWidget {
void zoomInHandle(bool checked); void zoomInHandle(bool checked);
void zoomOutHandle(bool checked); void zoomOutHandle(bool checked);
void drawlineHandle(bool checked); void drawlineHandle(bool checked);
void tutorialHanle(bool checked);
void srcHandle(bool checked);
void sponsorHandle(bool checked); void sponsorHandle(bool checked);
void refreshHandle(bool checked); void refreshHandle(bool checked);
void selectHandle(bool checked); void selectHandle(bool checked);
@ -70,10 +69,6 @@ namespace LAMPMainWidget {
private: private:
QWidget* spacerWiget(int width) const; QWidget* spacerWiget(int width) const;
protected:
static QString tutorialUrl();
static QString srcUrl();
private slots: private slots:
void on_drawArea_triggered(); void on_drawArea_triggered();
void on_addPlaneaction_triggered(); void on_addPlaneaction_triggered();

View File

@ -12,8 +12,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>906</width> <width>898</width>
<height>609</height> <height>580</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -84,7 +84,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>906</width> <width>898</width>
<height>22</height> <height>22</height>
</rect> </rect>
</property> </property>
@ -117,14 +117,11 @@
<property name="title"> <property name="title">
<string>工具</string> <string>工具</string>
</property> </property>
<addaction name="actioncloseAllRasterFile"/>
</widget> </widget>
<widget class="QMenu" name="helpMenu"> <widget class="QMenu" name="helpMenu">
<property name="title"> <property name="title">
<string>帮助</string> <string>帮助</string>
</property> </property>
<addaction name="tutorialAction"/>
<addaction name="srcAction"/>
<addaction name="separator"/> <addaction name="separator"/>
</widget> </widget>
<addaction name="projectMenu"/> <addaction name="projectMenu"/>
@ -137,6 +134,9 @@
</widget> </widget>
<widget class="QStatusBar" name="statusbar"/> <widget class="QStatusBar" name="statusbar"/>
<widget class="QToolBar" name="toolBar"> <widget class="QToolBar" name="toolBar">
<property name="enabled">
<bool>false</bool>
</property>
<property name="windowTitle"> <property name="windowTitle">
<string>toolBar</string> <string>toolBar</string>
</property> </property>
@ -378,6 +378,85 @@ p, li { white-space: pre-wrap; }
</layout> </layout>
</widget> </widget>
</widget> </widget>
<widget class="QDockWidget" name="dockWidget_Map">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="windowTitle">
<string>地图窗口</string>
</property>
<attribute name="dockWidgetArea">
<number>1</number>
</attribute>
<widget class="QWidget" name="dockWidgetContents_5">
<widget class="QTabWidget" name="tabWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>0</y>
<width>502</width>
<height>274</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="mapTab">
<attribute name="title">
<string>地图</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QGridLayout" name="mapCanvasLayout"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="taskTab">
<attribute name="title">
<string>任务</string>
</attribute>
<widget class="QWidget" name="gridLayoutWidget_5">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1431</width>
<height>871</height>
</rect>
</property>
<layout class="QGridLayout" name="taskLayout">
<item row="0" column="0">
<widget class="QTableWidget" name="taskTable"/>
</item>
</layout>
</widget>
</widget>
</widget>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>906</width>
<height>23</height>
</rect>
</property>
<widget class="QMenu" name="toolsMenu">
<property name="title">
<string>工具</string>
</property>
<addaction name="actioncloseAllRasterFile"/>
</widget>
<addaction name="toolsMenu"/>
</widget>
<action name="tutorialAction"> <action name="tutorialAction">
<property name="text"> <property name="text">
<string>使用教程</string> <string>使用教程</string>

View File

@ -11,6 +11,7 @@ GaodeNormalProvider::GaodeNormalProvider(QObject *parent)
QString QString
GaodeNormalProvider::tileUrl(const LAMPMainWidget::PointXY& pos, int zoom) const { GaodeNormalProvider::tileUrl(const LAMPMainWidget::PointXY& pos, int zoom) const {
QString urlFmt = { R"(http://wprd01.is.autonavi.com/appmaptile?style=6&x=%1&y=%2&z=%3)" }; QString urlFmt = { R"(http://wprd01.is.autonavi.com/appmaptile?style=6&x=%1&y=%2&z=%3)" };
return QString(urlFmt).arg(pos.x()).arg(pos.y()).arg(zoom); return QString(urlFmt).arg(pos.x()).arg(pos.y()).arg(zoom);
} }

View File

@ -36,6 +36,7 @@ MapCanvas::MapCanvas(QWidget *parent)
mMapUpdateTimer(nullptr), mMapUpdateTimer(nullptr),
mCurrentTool(nullptr), mCurrentTool(nullptr),
mMapTools() { mMapTools() {
setAutoFillBackground(true); setAutoFillBackground(true);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@ -158,7 +159,9 @@ MapCanvas::updateViewExtent(bool reset) {
QPointF mapCenter{ crsCenter.x() / resolution(), crsCenter.y() / resolution() }; QPointF mapCenter{ crsCenter.x() / resolution(), crsCenter.y() / resolution() };
QPointF offset = mapCenter - mViewExtent.center(); QPointF offset = mapCenter - mViewExtent.center();
mViewExtent.translate(offset.x(), offset.y()); mViewExtent.translate(offset.x(), offset.y());
} else { }
else {
qDebug() << "视图区域更新 平移范围 x ,y "<<-mDragRect.width()<<" , "<<-mDragRect.height() ;
/// 视图偏移并重置偏移属性 /// 视图偏移并重置偏移属性
mViewExtent.translate(-mDragRect.width(), -mDragRect.height()); mViewExtent.translate(-mDragRect.width(), -mDragRect.height());
mDragRect.setRect(0, 0, 0, 0); mDragRect.setRect(0, 0, 0, 0);
@ -225,9 +228,11 @@ MapCanvas::normalizeZoom(const int zoom) const {
int z{}; int z{};
if (zoom <= kMinZoomValue) { if (zoom <= kMinZoomValue) {
z = kMinZoomValue; z = kMinZoomValue;
} else if (z >= kMaxZoomValue) { }
else if (z >= kMaxZoomValue) {
z = kMaxZoomValue; z = kMaxZoomValue;
} else { }
else {
z = zoom; z = zoom;
} }

View File

@ -183,6 +183,7 @@ class MapCanvas : public QGraphicsView {
static const int kMinZoomValue{ 1 }; static const int kMinZoomValue{ 1 };
protected: protected:
// 设置默认地图中心点
static PointXY defaultMapCenter(); static PointXY defaultMapCenter();
}; };

View File

@ -53,8 +53,7 @@ namespace LAMPMainWidget
double progress = static_cast<double>(completed) / count; double progress = static_cast<double>(completed) / count;
auto progessStr = QString("%1").arg(progress * 100); auto progessStr = QString("%1").arg(progress * 100);
mTaskInfo.display->takeItem(mRowId, 4); mTaskInfo.display->takeItem(mRowId, 4);
mTaskInfo.display->setItem(mRowId, 4, mTaskInfo.display->setItem(mRowId, 4,new QTableWidgetItem(QString("%1").arg(progress * 100)));
new QTableWidgetItem(QString("%1").arg(progress * 100)));
// mTaskInfo.display->resizeColumnsToContents(); // mTaskInfo.display->resizeColumnsToContents();
// mTaskInfo.display->horizontalHeader()->setStretchLastSection(true); // mTaskInfo.display->horizontalHeader()->setStretchLastSection(true);
} }

View File

@ -52,9 +52,11 @@ TmsLayer::setZoomValue(int zoom) {
int zoomValue{}; int zoomValue{};
if (zoom <= minZoom()) { if (zoom <= minZoom()) {
zoomValue = minZoom(); zoomValue = minZoom();
} else if (zoom >= maxZoom()) { }
else if (zoom >= maxZoom()) {
zoomValue = maxZoom(); zoomValue = maxZoom();
} else { }
else {
zoomValue = zoom; zoomValue = zoom;
} }
@ -63,6 +65,7 @@ TmsLayer::setZoomValue(int zoom) {
bool bool
TmsLayer::parseTiles(const QRectF& rect, int zoom, QHash<QPoint, QString>& tiles, QSize& size) const { TmsLayer::parseTiles(const QRectF& rect, int zoom, QHash<QPoint, QString>& tiles, QSize& size) const {
auto pd = dynamic_cast<const TmsProvider*>(&provider()); auto pd = dynamic_cast<const TmsProvider*>(&provider());
auto tileSize = pd->tileSize(); auto tileSize = pd->tileSize();
auto resolution = mCrs->extent().width() / ((power2(zoom)) * tileSize.width()); auto resolution = mCrs->extent().width() / ((power2(zoom)) * tileSize.width());

View File

@ -14,7 +14,8 @@ TmsProviderFactory::create(LAMPMainWidget::TmsProviders provider) {
case OSTNormalMap: case OSTNormalMap:
if (mProviders.contains(OSTNormalMap)) { if (mProviders.contains(OSTNormalMap)) {
result = mProviders.value(OSTNormalMap); result = mProviders.value(OSTNormalMap);
} else { }
else {
result = new OSTNormalProvider(); result = new OSTNormalProvider();
mProviders.insert(OSTNormalMap, result); mProviders.insert(OSTNormalMap, result);
} }
@ -22,7 +23,8 @@ TmsProviderFactory::create(LAMPMainWidget::TmsProviders provider) {
case GaodeNormapMap: case GaodeNormapMap:
if (mProviders.contains(GaodeNormapMap)) { if (mProviders.contains(GaodeNormapMap)) {
result = mProviders.value(GaodeNormapMap); result = mProviders.value(GaodeNormapMap);
} else { }
else {
result = new GaodeNormalProvider(); result = new GaodeNormalProvider();
mProviders.insert(GaodeNormapMap, result); mProviders.insert(GaodeNormapMap, result);
} }

View File

@ -106,6 +106,7 @@
<IncludePath>.;.\RasterMainWidget;..\RasterProcessToolWidget;..\RasterProcessToolWidget\ToolBoxManager;..\BaseCommonLibrary;..\BaseCommonLibrary\BaseTool;..\BaseCommonLibrary\ToolAbstract;..\GPUBaseLib\GPUTool;..\GPUBaseLib;..\RasterMainWidgetGUI;..\RasterMainWidgetGUI\RasterMainWidget;$(IncludePath)</IncludePath> <IncludePath>.;.\RasterMainWidget;..\RasterProcessToolWidget;..\RasterProcessToolWidget\ToolBoxManager;..\BaseCommonLibrary;..\BaseCommonLibrary\BaseTool;..\BaseCommonLibrary\ToolAbstract;..\GPUBaseLib\GPUTool;..\GPUBaseLib;..\RasterMainWidgetGUI;..\RasterMainWidgetGUI\RasterMainWidget;$(IncludePath)</IncludePath>
<CopyLocalProjectReference>true</CopyLocalProjectReference> <CopyLocalProjectReference>true</CopyLocalProjectReference>
<CopyCppRuntimeToOutputDir>true</CopyCppRuntimeToOutputDir> <CopyCppRuntimeToOutputDir>true</CopyCppRuntimeToOutputDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<IncludePath>.;.\RasterMainWidget;..\RasterProcessToolWidget;..\RasterProcessToolWidget\ToolBoxManager;..\BaseCommonLibrary;..\BaseCommonLibrary\BaseTool;..\BaseCommonLibrary\ToolAbstract;..\GPUBaseLib\GPUTool;..\GPUBaseLib;..\RasterMainWidgetGUI;..\RasterMainWidgetGUI\RasterMainWidget;$(IncludePath)</IncludePath> <IncludePath>.;.\RasterMainWidget;..\RasterProcessToolWidget;..\RasterProcessToolWidget\ToolBoxManager;..\BaseCommonLibrary;..\BaseCommonLibrary\BaseTool;..\BaseCommonLibrary\ToolAbstract;..\GPUBaseLib\GPUTool;..\GPUBaseLib;..\RasterMainWidgetGUI;..\RasterMainWidgetGUI\RasterMainWidget;$(IncludePath)</IncludePath>
@ -115,6 +116,10 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile> <ClCompile>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SILENCE_NONFLOATING_COMPLEX_DEPRECATION_WARNING;RASTERMAINWIDGETGUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SILENCE_NONFLOATING_COMPLEX_DEPRECATION_WARNING;RASTERMAINWIDGETGUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<OpenMPSupport>true</OpenMPSupport>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<WholeProgramOptimization>false</WholeProgramOptimization>
<Optimization>Disabled</Optimization>
</ClCompile> </ClCompile>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">

View File

@ -21,6 +21,9 @@
<UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier> <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier>
<Extensions>ts</Extensions> <Extensions>ts</Extensions>
</Filter> </Filter>
<Filter Include="RasterLayer">
<UniqueIdentifier>{1a65f538-c16c-4824-895f-105eb2fc502e}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtRcc Include="RasterMainWidgetGUI.qrc"> <QtRcc Include="RasterMainWidgetGUI.qrc">

View File

@ -7,6 +7,7 @@ namespace RasterMessageShow {
RasterWidgetMessageShow::RasterWidgetMessageShow(QObject* parant):QObject(parant) RasterWidgetMessageShow::RasterWidgetMessageShow(QObject* parant):QObject(parant)
{ {
this->textBrowserMessage = nullptr;
QObject::connect(this, SIGNAL(ShowMessage(QString)), this, SLOT(ShowMessageInfo(QString))); QObject::connect(this, SIGNAL(ShowMessage(QString)), this, SLOT(ShowMessageInfo(QString)));
} }
@ -26,12 +27,12 @@ namespace RasterMessageShow {
void RasterWidgetMessageShow::ShowMessageInfo(QString Message) void RasterWidgetMessageShow::ShowMessageInfo(QString Message)
{ {
std::cout << Message.toLocal8Bit().constData() << std::endl;
if (nullptr != this->textBrowserMessage) { if (nullptr != this->textBrowserMessage) {
this->textBrowserMessage->append(Message); this->textBrowserMessage->append(Message);
this->textBrowserMessage->moveCursor(QTextCursor::MoveOperation::End); this->textBrowserMessage->moveCursor(QTextCursor::MoveOperation::End);
this->textBrowserMessage->repaint(); this->textBrowserMessage->repaint();
std::cout << Message.toLocal8Bit().constData() << std::endl; std::cout << Message.toLocal8Bit().constData() << std::endl;
} }
else {} else {}
} }

View File

@ -1,6 +1,8 @@
#include "LAMPMainWidgetRunProgram.h" #include "LAMPMainWidgetRunProgram.h"
#include <QtWidgets/QApplication> #include <QtWidgets/QApplication>
// 这个项目是基于easygis项目原项目地址 https://gitee.com/stormeye2020/easygis.git
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QApplication a(argc, argv); QApplication a(argc, argv);