• 6490阅读
  • 2回复

[提问]關於Combox的currentIndex和switch結合的用法? [复制链接]

上一主题 下一主题
离线qoo0707q
 
只看楼主 倒序阅读 楼主  发表于: 2012-11-08



今天睡醒突然回想到我的Qt4的用法好像怪怪
但我發現我的用法好像有錯誤卻不知道如何解決
以下是我的宣告方式(我列出其中部分程式碼)
(小弟我初次接觸Qt4,而之前用的是qtopia 2.2.0,所以以下都是從qtopia 2.2.0改寫過來的,感覺兩者語法不同了)
想請問有高手可以指點我一下嗎?


char *myCom;
long myBaud;
long myByte;
long myParity;


int ComIndex = ui->comCombo->currentIndex();
switch(ComIndex)
{
case 0:
   myCom="/dev/tty0";  //選擇COM1埠
break;
case 1:
   myCom="/dev/tty1";
break;
case 2:
   myCom="/dev/tty2";
break;
default:
   myCom="/dev/tty1";
break;
}
int BaudIndex = ui->baudCombo->currentIndex();
switch(BaudIndex)
{
case 0:
   myBaud=B4800;    //傳輸方式
break;
case 1:
   myBaud=B9600;
break;
case 2:
   myBaud=B19200;
break;
case 3:
   myBaud=B38400;
break;
default:
   myBaud=B4800;
break;
}
int BaudIndex = ui->baudCombo->currentIndex();
switch(BaudIndex)
{
case 0:
   myByte=CS5;    
break;
case 1:
   myByte=CS6;
break;
case 2:
   myByte=CS7;
break;
case 3:
   myByte=CS8;
break;
default:
   myByte=CS8;
break;
}


newtio.c_cflag = myBaud | myByte | STOPBITS | myParity | CLOCAL | CREAD ;  //控制模式


問題一
小弟我發現這樣好像是不行的,我看了一下ui的屬性欄位
發現裡面都有一個currentIndex的欄位,值為:0 (每一個ComBox的currentIndex預設數值都是0)
那我這樣宣告nt ComIndex = ui->comCombo->currentIndex(); 根本是沒作用的 ,swith(ComIndex)的值都永遠是0(好像永遠都選擇是case 0)
那我要如何改寫才能使它依照我選的選單內容作更動?(例如我選 case 2:  myByte=CS7;  break;)


問題二
關於這樣的宣告是有效的嗎?  myCom="/dev/tty0";、 myBaud=B4800; 和  myByte=CS8;
感覺並沒有去抓到 2440裡面COM1 埠
也好像沒有轉成 4800  Byte/ s的樣子
以及沒有轉變成 8 bits 一組的型式  
這部分是有何種錯誤嗎?


問題三
在Qt4中,char *myCom;  long myBaud;  long myByte;  long myParity; ,這樣宣告算是合法嗎?
我編譯後都是默認成功,讓我也無從找起  (ˊ~ˋ)


麻煩各位高手了,謝謝
离线liuxu_lx7
只看该作者 1楼 发表于: 2012-11-09
沒完整的看完你的問題,不過使用方法,從最開始就錯誤了。思路錯誤。
打開QT手冊,查QComboBox會看到

【void    addItem ( const QString & text, const QVariant & userData = QVariant() )】
你按照你要的顯示順序依次添加你的item,第一個參數是你要顯示在QComboBox上的文字,第2各參數是【任意類型】的數據,也就是你上面那堆【"/dev/tty"】這種值。當你點擊QComboBox后,選擇其中一個item,你會接收到一個【void    activated ( int index )】的消息(Qt的signal/slot 你知道吧?假設你知道)。
那麽調用【QVariant       itemData ( int index, int role = Qt::UserRole ) const 】函數(第2個參數你不用輸入了,使用默認的)就可以得到一個 QVariant 類型的返回值,對吧。它就是你的【"/dev/tty"】。使用【QString QVariant::toString () const】 就可以轉會來了。


离线liuxu_lx7
只看该作者 2楼 发表于: 2012-11-09
回 楼主(qoo0707q) 的帖子
回複你第3個問題:
這種聲明方式(你們叫他宣告哦~ ^_^),是跟語言相關的,和QT無關。 這樣寫是沒問題的,不過,最好按照【類型】的不同換行,再考慮同類型數據之間是否有關聯,如果無關聯——果斷換行 哈~
快速回复
限100 字节
 
上一个 下一个