在使用mapx的过程中出现问题,当我不传入jd,wd时,每次打开子窗口都能正常显示,如下图1,当我传入数据后,关闭子窗口在打开会显示图2,注释掉自定义的drawPoint()函数后又不会出现上述问题。子窗口的代码如下:
#define ERROR_RANGE 0.00001 //误差范围
MapWidget::MapWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MapWidget)
{
ui->setupUi(this);
map = new Map("MAPS",this);
map->move(QPoint(0,0));
// map->SetGeoSet("D:/MapX/Maps/ASIA.gst");
map->SetGeoSet("F:/test/QT5.2/test_mapx/src/maps/2013.gst");
map->SetTitleText("");
map->resize(QSize(size().width(),size().height()));
map->SetCurrentTool(ToolConstants::miPanTool);
map->setProperty("MousewheelSupport",miMousewheelNoAutoScroll);
map->SetAutoRedraw(true);
pCMapLayers = map->Layers();
pCMapLayer = pCMapLayers->CreateLayer("test");
pCMapFeaFactory = map->FeatureFactory();
setCenter(map);
}
MapWidget::~MapWidget()
{
delete map;
delete ui;
}
/****** 位置定点的函数 ******/
void MapWidget::drawPoint()
{
/****** 下列代码是导致 接收数据定点后,无法重新打开mapx 的原因 ******/
pCMapXcharacter = pCMapFeaFactory->CreateSymbol();
pCMapXPoint = pCMapXcharacter->Point();
pCMapXPoint->Set(latitude, longitude);
pCMapStyle = pCMapXcharacter->Style();
pCMapStyle->SetSymbolCharacter(46);
pCMapStyle->TextFont().setPixelSize(1000);
pCMapStyle->SetSymbolFontColor(QColor(255,0,0));
Font = pCMapStyle->SymbolFont();
Font.setBold(true);
pCMapLayer->AddFeature(pCMapXcharacter->asVariant().value<IDispatch*>());
}
/****** 初始化地图中心 ******/
void MapWidget::setCenter(Map *map)
{
map->ZoomTo(50,104.65, 31.5124);
}
void MapWidget::setcoordinate(double wd,double jd)
{
if(jd==latitude&&wd==longitude){
qDebug()<<"same as last data";
return;
}
/****** 判断是否在误差范围内 ******/
if(qFabs(jd-latitude)<ERROR_RANGE&&qFabs(wd-longitude)<ERROR_RANGE){
qDebug()<<"in the range of error";
return;
}
latitude = jd;
longitude = wd;
qDebug()<<"coordinate:"<<latitude<<longitude;
/****** 下列1行代码是造成 接收数据后无法打开mapx 的原因 ******/
drawPoint();
map->SetZoom(5);
// map->ZoomTo(5,latitude, longitude);//造成闪烁的原因
}
/****** 打开select map窗口选择的文件 ******/
void MapWidget::setMapWidget(QString url)
{
map->SetGeoSet(url);
map->SetTitleText("");
}