QT獲取控制元件的內容去傳參的小發現
1://處理文字框(內容是一個連續的字串)的方法(不能直接用文字框的內容去傳參,
//否則會有意想不到的錯誤發生,需要利用先拷貝到陣列,然後利用陣列去傳參),
#include <QStringList>
#include <QString>
int argc = 0;
int i = 0;
char *argv[10]={NULL};
QString str;
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函式
}