www.pudn.com > routeplan_mainmenu.rar > drawmap.cpp


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "drawmap.h"
#include "mainwindow.h"
#include "mainmenu.h"

struct qj
{
   int qjx;
   int qjy;
}qj[3000];

struct hupo
{
   int hpx;
   int hpy;
}hupo[300];
                                                                                
struct shuiku
{
   int skx;
   int sky;
}shuiku[1000];

struct lvdi
{
   int ldx;
   int ldy;
}lvdi[600];

struct jumindi
{
   int jmdx;
   int jmdy;
}jumindi[1000];

struct shuangxianhe
{
   int sxhx;
   int sxhy;
}shuangxianhe[1000];

struct daolu1    
{
   int dl1x;
   int dl1y;
}daolu1[5000];

struct daolu2     
{
   int dl2x;
   int dl2y;
}daolu2[5000]; 

struct daolu3     
{
   int dl3x;
   int dl3y;
}daolu3[25000];

struct tielu      
{
   int tlx;
   int tly;
}tielu[5000]; 

struct gongyuanlu
{
   int gylx;
   int gyly;
}gongyuanlu[5000];

struct gaosu
{
   int gsx;
   int gsy;
}gaosu[100];

struct qiao
{
   int qx;
   int qy;
}qiao[1000];

struct wenzi
{
   int wzx;
   int wzy;
}wenzi[1000];

struct diwu2
{ 
   int dw2x;
   int dw2y;
}diwu2[1000];


float z=1.0;
float ud=0.0;
float rl=0.0;
float z1[100];
float z2[100];
FILE *fpp1;
char zifu[20];
int m=0;
QString qs;
QString  Name;
float x1=-100.0;
float y11=-100.0;
int main(int argc,char **argv)
{
   QApplication a(argc,argv);
   QFont font("unifont",5);
   a.setFont(font);

   QTranslator *translator = new QTranslator(0);
   translator->load("drawmap.qm", ".");
   a.installTranslator(translator);
   QScrollView w;  
   //w.setFixedSize(150,200);
   w.setCaption(QObject::tr("Hangzhou map"));
   MainWindow *m=new MainWindow;                  
   w.addChild(m);   
   a.setMainWidget(&w);
   w.show(); 
   return a.exec();
}

MainWindow::MainWindow(QWidget *parent,const char *name)
          :QWidget(parent,name)
{
 QPushButton *enxiao=new QPushButton(tr("zoom in"),this,"enxiao");
 connect(enxiao,SIGNAL(clicked()),this,SLOT(suoxiao()));
  QPushButton *enlarge=new QPushButton(tr("zoom out"),this,"enlarge");
 connect(enlarge,SIGNAL(clicked()),this,SLOT(fangda()));
  QPushButton *up1=new QPushButton(tr("up"),this,"up1");
 connect(up1,SIGNAL(clicked()),this,SLOT(up()));
  QPushButton *down1=new QPushButton(tr("down"),this,"down1");
 connect(down1,SIGNAL(clicked()),this,SLOT(down()));
  QPushButton *right1=new QPushButton(tr("right"),this,"right1");
 connect(right1,SIGNAL(clicked()),this,SLOT(right()));
  QPushButton *left1=new QPushButton(tr("left"),this,"left1");
 connect(left1,SIGNAL(clicked()),this,SLOT(left()));

 QPushButton *reset1=new QPushButton(tr("reset"),this,"reset1");
  connect(reset1,SIGNAL(clicked()),this,SLOT(reset()));
 QPushButton *routeplan=new QPushButton(tr("Route Plan"),this);
  connect(routeplan,SIGNAL(clicked()),this,SLOT(popupDialog()));
QListView *w = new QListView(this );
w->setRootIsDecorated( true );
w->addColumn( QString(tr("DiMing")) );
w->addColumn(QString("NUM"));
QListViewItem *i1= new QListViewItem( w, QString(tr("Shangchengqu")));
QListViewItem *i2 = new QListViewItem( w, QString(tr("Xihuqu")) );
QListViewItem *i3 = new QListViewItem( w, QString(tr("Gongshuqu")) );
QListViewItem *i4 = new QListViewItem( w, QString(tr("Xiachengqu")) );
QListViewItem *i5 = new QListViewItem( w, QString(tr("Jiangganqu")) );

 i1->setOpen( true );
 i2->setOpen( true );
 i3->setOpen( true );
 i4->setOpen( true );
 i5->setOpen( true );


 if((fpp1=fopen("shangchengqu.txt","r"))!=NULL)
   {
      while(fscanf(fpp1,"%f %f %s\n",&z1[m],&z2[m],zifu)==3)
      {
        QTextCodec *codec = QTextCodec::codecForName("GBK");
        qs = codec->toUnicode (zifu)  ;
        new QListViewItem( w->firstChild(), qs, QString::number(m));
         m++;
      }
  }
fclose(fpp1);

 if((fpp1=fopen("xiachengqu.txt","r"))!=NULL)
   {
      while(fscanf(fpp1,"%f %f %s\n",&z1[m],&z2[m],zifu)==3)
      {
        QTextCodec *codec = QTextCodec::codecForName("GBK");
        qs = codec->toUnicode (zifu)  ;
        new QListViewItem( w->firstChild()->nextSibling(), qs,QString::number(m));
        m++;                                                                                
      }
   }
fclose(fpp1);

 if((fpp1=fopen("gongshuqu.txt","r"))!=NULL)
   {
      while(fscanf(fpp1,"%f %f %s\n",&z1[m],&z2[m],zifu)==3)
      {
        QTextCodec *codec = QTextCodec::codecForName("GBK");
        qs = codec->toUnicode (zifu)  ;
        new QListViewItem( w->firstChild()->nextSibling()->nextSibling(), qs,QString::number(m));
        m++;                                                                           
 }
}
fclose(fpp1);

 if((fpp1=fopen("jiangganqu.txt","r"))!=NULL)
   {
      while(fscanf(fpp1,"%f %f %s\n",&z1[m],&z2[m],zifu)==3)
      {
        QTextCodec *codec = QTextCodec::codecForName("GBK");
        qs = codec->toUnicode (zifu)  ;                                                            
        new QListViewItem( w->firstChild()->nextSibling()->nextSibling()->nextSibling(), qs,QString::number(m));
        m++;                                                                            
     }
   }
fclose(fpp1);

 if((fpp1=fopen("xihuqu.txt","r"))!=NULL)
   {
      while(fscanf(fpp1,"%f %f %s\n",&z1[m],&z2[m],zifu)==3)
      {
        QTextCodec *codec = QTextCodec::codecForName("GBK");
        qs = codec->toUnicode (zifu)  ;
        new QListViewItem( w->firstChild()->nextSibling()->nextSibling()->nextSibling()->nextSibling(), qs, QString::number(m));
        m++;                                                                        
      }
   }
fclose(fpp1);

connect(w,SIGNAL(doubleClicked( QListViewItem *  )),this,SLOT(reset()));
 
connect(w,SIGNAL(doubleClicked( QListViewItem *  )),this,SLOT(chaxun( QListViewItem *)));
connect(w,SIGNAL(doubleClicked( QListViewItem *  )),this,SLOT(fangda()));

Drawmap *na=new Drawmap(this,"Drawmap");
connect(enxiao,SIGNAL(clicked()),na,SLOT(update()));
connect(enlarge,SIGNAL(clicked()),na,SLOT(update()));
 connect(up1,SIGNAL(clicked()),na,SLOT(update()));
 connect(down1,SIGNAL(clicked()),na,SLOT(update()));
connect(right1,SIGNAL(clicked()),na,SLOT(update()));
connect(left1,SIGNAL(clicked()),na,SLOT(update()));
 connect(reset1,SIGNAL(clicked()),na,SLOT(update()));
connect(w,SIGNAL(doubleClicked( QListViewItem *  )),na,SLOT(update()));

   QVBoxLayout *leftLayout=new QVBoxLayout;
   leftLayout->addWidget(enxiao);
   leftLayout->addWidget(enlarge);
   leftLayout->addWidget(up1);
   leftLayout->addWidget(down1);
   leftLayout->addWidget(right1);
   leftLayout->addWidget(left1);
   leftLayout->addWidget(reset1);
   leftLayout->addWidget(routeplan);
   leftLayout->addWidget(w);
   QGridLayout *rightLayout=new QGridLayout;
   rightLayout->addWidget(na,0,0);
   QHBoxLayout *mainLayout=new QHBoxLayout(this);
   mainLayout->addLayout(leftLayout);
   mainLayout->addLayout(rightLayout);
}

Drawmap::Drawmap(QWidget *parent,const char *name)
       :QWidget(parent,name)
{ 
   setBackgroundColor(QColor(225,255,255));
   setFixedSize(2000,2000);    
}

void MainWindow::suoxiao()
{ ud=ud+155*(z-1);
 rl=rl+125*(z-1);
 z=z/2;
}

void MainWindow::fangda()
{
 z=z*2;
 ud=ud-155*(z-1);
 rl=rl-125*(z-1);
}

 void MainWindow::up()
{
 ud=ud-30;
}

 void MainWindow::down()
{
 ud=ud+30;
}
 void MainWindow::left()
{
 rl=rl-30;
}
 void MainWindow::right()
{
 rl=rl+30;
}
void MainWindow::reset()
{rl=0;
 ud=0;
 z=1;
 x1=-100.0;
 y11=-100.0;
}
void MainWindow::popupDialog()
{
 mainmenubase *f = new mainmenubase( 0, "jiemian");
 f->exec();
 delete f;
}
void MainWindow::chaxun( QListViewItem *i )
{ if ( !i )
  return;
   QListViewItem *item=(QListViewItem *)i;
int nx;
Name=item->text(1);
for(nx=0;nx<100;nx++)
{if(Name==QString::number(nx))
{
x1=z*500*(z1[nx]-120.081078)/0.167662;
y11=z*607*(30.374923-z2[nx])/0.203584;
rl=rl-x1+80;
ud=ud-y11+80;
x1=x1-50;
y11=y11-80;
cout<toUnicode (zhongwen)  ;
         p.translate(wenzi[n].wzx,wenzi[n].wzy);
         p.drawText(0,0,qs);
         p.translate(-wenzi[n].wzx,-wenzi[n].wzy);
         n++;
      }
   }
   fclose(fdw);

   if((fsplm=fopen("shuipingluming.txt","r"))!=NULL)
   {
      QPainter p(this);
      while(fscanf(fsplm,"%f %f %s\n",&x2,&y2,zhongwen)==3)
      {
         wenzi[n].wzx=(int)(z*500*(x2-120.081078)/0.167662+rl);
         wenzi[n].wzy=(int)(z*607*(30.374923-y2)/(30.374923-30.171339)+ud);
         QTextCodec *codec = QTextCodec::codecForName("GBK");
         QString qs = codec->toUnicode (zhongwen)  ;
         p.translate(wenzi[n].wzx,wenzi[n].wzy);
         p.drawText(0,0,qs);
         p.translate(-wenzi[n].wzx,-wenzi[n].wzy);
         n++;
      }
   }
   fclose(fsplm);

   if((fdw2=fopen("diwu2.txt","r"))!=NULL)
   {
      QPainter p(this);
      p.setBrush(QColor("black"));
      while(fscanf(fdw2,"%f %f\n",&x2,&y2)==2)
      {
         diwu2[o].dw2x=(int)(z*500*(x2-120.081078)/0.167662+rl);
         diwu2[o].dw2y=(int)(z*607*(30.374923-y2)/(30.374923-30.171339)+ud);
         p.moveTo((int)diwu2[o].dw2x,(int)diwu2[o].dw2y);
         p.drawEllipse((int)diwu2[o].dw2x,(int)diwu2[o].dw2y,5,5);
         o++;
      }
   }
   fclose(fdw2);

  p.setBrush(QColor("red"));
  p.moveTo((int)x1,(int)y11);
  p.drawEllipse((int)x1,(int)y11,10,10);


}