• 6891阅读
  • 4回复

[讨论]這樣的語法在Qt算是正確嗎? [复制链接]

上一主题 下一主题
离线qoo0707q
 
只看楼主 倒序阅读 楼主  发表于: 2012-11-04
小弟我不才
除錯後可以執行,但是點擊Button,會無法秀出結果(在LineEdit)
有哪位高手可以改正我的錯誤語法和宣告方式?
我不曉得我城市中的宣告,QString data_1="",data_2="";、 char b[20];、const char *long、data_2 += longi;、
  ui->GpsReceive->setText(data_2);這幾個算是Qt正確的語法嗎?
----------------------------------------------------------------------------------------------------------------------------------------------
void Dialog::readcom()
{
connect(ui->readBtn,SIGNAL(clicked()),this,SLOT(readcom()));
  while(1)
{
  gps=1;
  QString data_1="",data_2="";

  res=read(fd,buf,256);
  buf[res]='\0';
  if((buf[3]!='G')||(buf[4]!='G')||(buf[5]!='A'))
{
  num=0;
  for(i=0;i<res;i++)
  {
  data_1 += buf;
  if(buf!=',')
  {
  continue;
  }
  else
  {
  num++;
  }
  switch(num)
  {
  case 6:
  if(buf[i+1]=='0')
  {
  ui->GpsReceive->setText(data_1);
  ui->GpsReceive_2->setText("GPA is not True");
  break;
  }
  }
  }
  num=0;
  if(gps!=0)
  {
  for(i=0;i<res;i++)
  {
  if(buf!=',')
  {
  continue;
  }
  else
  {
  num++;
  }
  switch(num)
  {
  case 1://時間
  data_2 += "Taiwan Timee:";
  Time[0]=buf[i+1];
  Time[1]=buf[i+2];
  Time[2]='\0';

  char b[20];

  tt = atoi(Time)+8;
  sprintf(b,"%d",tt);
  data_2 += b;
  data_2 += ":";
  Time[0]=buf[i+3];
  Time[1]=buf[i+4];
  Time[2]='\0';

  mm = atoi(Time);
  sprintf(b,"%d",mm);
  data_2 += b;
  data_2 += ":";
  Time[0]=buf[i+5];
  Time[1]=buf[i+6];
  Time[2]='\0';

  ss= atoi(Time);
  sprintf(b,"%d",ss);
  data_2 += b;
  data_2 += ",";
  break;
  case 2://緯度
  latiplace1[0] = buf[i+1];//度
  latiplace1[1] = buf[i+2];//度
  latiplace1[2] = '\0';
  latiplace2[0] = buf[i+3];//分
  latiplace2[1] = buf[i+4];//分
  latiplace2[2] = buf[i+5];//buf[i+5] 是 .
  latiplace2[3] = buf[i+6];//分
  latiplace2[4] = buf[i+7];//分
  latiplace2[5] = buf[i+8];//分
  latiplace2[6] = buf[i+9];//分
  latiplace2[7] = '\0';
  latitude = atof(latiplace1) + atof(latiplace2)/60; //120
  //char b[20];
  sprintf(b,"%f",latitude);
  data_2 += b;
  data_2 += ",";
  ui->latitudeLineEdit->setText(b);
  break;
  case 3://南北緯
  if(buf[i+1]=='N')
  {
  QString lati = "North Latitude";
  }
  else
  {
  lati = "South Latitude";
  }
  data_2 += lati;
  data_2 += ",";
  break;
  case 4://經度
  longiplace1[0] = buf[i+1];//度
  longiplace1[1] = buf[i+2];//度
  longiplace1[2] = buf[i+3];//度
  longiplace1[3] = '\0';
  longiplace2[0] = buf[i+4];//分
  longiplace2[1] = buf[i+5];//分
  longiplace2[2] = buf[i+6];//buf[i+6] 是.
  longiplace2[3] = buf[i+7];//分
  longiplace2[4] = buf[i+8];//分
  longiplace2[5] = buf[i+9];//分
  longiplace2[6] = buf[i+10];//分
  longiplace2[7] = '\0';
  longitude = atof(longiplace1) +atof(longiplace2)/60;
  sprintf(b,"%f",longitude);
  data_2 += b;
  data_2 += ",";
ui->longitudeLineEdit->setText(b);
  break;
  case 5://東西經
  if(buf[i+1]=='E')
  {
  longi = "East Longitude";
  }
  else
  {
  longi = "West Longitude";
  }
  data_2 += longi;
  data_2 += "。";
  break;
  case 6:
  ui->GpsReceive->setText(data_1);
  ui->GpsReceive_2->setText(data_2);
  }
  }
  }


离线XChinux

只看该作者 1楼 发表于: 2012-11-04
你问题在哪里?
  QString lati = "North Latitude";

这句是有问题的吧?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线qoo0707q
只看该作者 2楼 发表于: 2012-11-04
回 1楼(XChinux) 的帖子
XChinux您好:
我有試過QString lati = "North Latitude";這種寫法
編譯後的也沒出現問題(警告也沒出現)
但是我點擊Button(void Dialog::reacom 功能紐)
卻無法啟動GPS擷取GPGGA訊息顯示在LineEdit(Mini2440友善之臂)
還是我可以將完整代碼PO上來請您幫我指證哪邊有問題?
离线ywchen2000

只看该作者 3楼 发表于: 2012-11-04
c++语法上没有这样搞法的
ipanforlinux 金山快盘LINUX版本
qnotepad  一个功能强大的文本编辑器
欢迎访问http://www.ipanx.net
离线0xffffh

只看该作者 4楼 发表于: 2012-11-05
Hi,
如果能通过编译,并能执行起来的话语法上是没有问题的,“但是點擊Button,會無法秀出結果(在LineEdit)”,应该是你的connection建立的有错:
   connect(ui->readBtn,SIGNAL(clicked()),this,SLOT(readcom()));
这个写在了readcom()函数中,如果readcom在此之前从未调用过的话,那么这个connection是不会建立起来的,因此可以尝试在构造函数中完成,需要注意的是必须在readBtn被创建之后,你这里的话应该在setupUI之后。

PS:你是大陆人吗,干嘛全繁体?
快速回复
限100 字节
 
上一个 下一个