• 3537阅读
  • 1回复

大家帮忙看一下这个问题 [复制链接]

上一主题 下一主题
离线powerdarksky
 

只看楼主 倒序阅读 楼主  发表于: 2009-06-22
建立一个函数,把一个LineEdit中读取的数据stext,比如当用户输入 123 456 789 N的时候,变为123°456'789''N,123赋值给sgrad, 456赋值给smin, 789赋值给ssec, N赋值给spos。
调用函数,分别将sgrad, smin, ssec转成double grad min sec, 然后判定spos的取值范围,确定a的取值,建立公式 (grad+min/60+sec/60/60)*a

QMessageBox一直会弹出Warning,please input the correct form!
在change()后设置断点debug的时候输出的stext, sgrad, smin, ssec, spos是正确的
然后当apply()中,使用change()函数之后设置断点,发现所有的都没有赋值
不知道是哪段写错了

void change(QString stext, QString sgrad, QString smin, QString ssec, QString spos)
{
    QString a = "\°";
    QString b = "\'";
    QString c = "\"";
    QString d = " ";
    int pos1=-1;
    int pos2=-1;
    int pos3=-1;
    pos1 = stext.indexOf(d,0);
    stext = stext.replace(pos1,1,a);
    if(pos1 != -1)
    {
        pos2 = stext.indexOf(d,pos1+1);
        stext = stext.replace(pos2,1,b);
    }
    if(pos2 != -1)
    {
        pos3 = stext.indexOf(d,pos2+1);
        stext = stext.replace(pos3,1,c);
    }
    sgrad = stext.mid(0,pos1);
    smin = stext.mid(pos1+1,pos2-pos1-1);
    ssec = stext.mid(pos2+1,pos3-pos2-1);
    spos = stext.mid(pos3+1);
}

void AreaFilter::apply()
{
    bool ok1, ok2, ok3, ok4, ok5, ok6,ok7;
    double a=1, b=1;
    double lattitude=0, longitude=0, radius=0;
    double lattitude_t=0, longitude_t=0;
    QString stext_latt = lattitudeEdit->text();
    QString stext_long = longitudeEdit->text();
    change(stext_latt, sgrad_latt, smin_latt, ssec_latt, spos_latt);
    change(stext_long, sgrad_long, smin_long, ssec_long, spos_long);
    double grad_latt = sgrad_latt.toDouble(&ok1);
    double min_latt = smin_latt.toDouble(&ok2);
    double sec_latt = ssec_latt.toDouble(&ok3);
    double grad_long = sgrad_long.toDouble(&ok4);
    double min_long = smin_long.toDouble(&ok5);
    double sec_long = ssec_long.toDouble(&ok6);
  double radius_t = (radiusEdit->text()).toDouble(&ok7);
    if (ok1&&ok2&&ok3&&ok4&&ok5&&ok6&&ok7&&((spos_latt == "W")||(spos_latt == "E"))&&((spos_long =="N" )||(spos_long == "S")))
    {
        spos_latt=="E"?a=1:a=-1;
        spos_long=="N"?b=1:b=-1;

    }    
    else
    {
        QMessageBox::warning(this,"Warning","please input the correct form!");
    }
    lattitude_t = (grad_latt+min_latt/60+sec_latt/60/60)*a;
    longitude_t = (grad_long+min_long/60+sec_long/60/60)*b;
    if (lattitude_t<-180||lattitude_t>180||longitude_t<-180||lattitude_t>180)
    {
        QMessageBox::warning(this,"Warning","the input is overflow!");
    }
    else
    {
        lattitude = lattitude_t;
        longitude = longitude_t;
        radius = radius_t;
    
    // example of a signal raising
    emit applyFilter(lattitude,longitude,radius);
    }
    pickButton->setEnabled(true);
}
[ 此帖被powerdarksky在2009-06-23 02:42重新编辑 ]
离线powerdarksky

只看该作者 1楼 发表于: 2009-06-23
已经解决,只要change函数的参数那里加入引用就可以了change(&stext................)
快速回复
限100 字节
 
上一个 下一个