1. 程式人生 > >QT獲取控制元件的內容去傳參的小發現

QT獲取控制元件的內容去傳參的小發現

1://處理文字框(內容是一個連續的字串)的方法(不能直接用文字框的內容去傳參,
//否則會有意想不到的錯誤發生,需要利用先拷貝到陣列,然後利用陣列去傳參),


#include <QStringList>
#include <QString>
 int argc  = 0;
 
     int i = 0;
   
   char *argv[10]={NULL};
   
   QString str;
   
  

 QStringList strList;
   
  char argv_buf[1024]={0};
   
  int buf_len = 0;    

 str = ui->can_file->text();  //獲取單行輸入框的內容
        strList= str.split(" ",QString::SkipEmptyParts);將單行輸入框的內容按空格進行切割,並且去除多餘空格,返回值是字串列表
        str = strList[0];
        strncpy(&argv_buf[buf_len],str.toStdString().c_str(),strlen(str.toStdString().c_str())); //將str轉化為C標準字串,並且拷貝給陣列,
        argv[1]=&argv_buf[buf_len];  //讓指標去指向這個陣列
        buf_len += strlen(str.toStdString().c_str());
        argv_buf[buf_len] = '\0';
        buf_len+=1;

。。。。。。

argv[argc] = NULL;

canconfig_main(argc, argv,ui); //傳參呼叫canconfig_main函式

//處理文字框(內容是不連續的字串)的方法(不能直接用文字框的內容去傳參,
//否則會有意想不到的錯誤發生,需要利用先拷貝到陣列,然後利用陣列去傳參), 


    bzero(argv_buf,1024);
        str = ui->can_con_cmd->text();
        strList= str.split(" ",QString::SkipEmptyParts);
        argc = strList.count();


        for(i = 0;i<argc;i++)
        {
            str = strList[i];
            strncpy(&argv_buf[buf_len],str.toStdString().c_str(),strlen(str.toStdString().c_str()));
            argv[i]=&argv_buf[buf_len];
            buf_len += strlen(str.toStdString().c_str());
            argv_buf[buf_len] = '\0';
            buf_len+=1;
        }
        argv[argc] = NULL;

 canconfig_main(argc, argv,ui); //傳參呼叫canconfig_main函式

    }