
這是我用 QtreeWidgetItem 做的表格
我在linux中的原始資料是 長這樣
USB Server|||0|1|192.168.2.17|255.255.255.0|00:28:68:00:00:26|1|2|00|029.000
USB Server|||1|1|192.168.2.191|255.255.255.0|00:1F:D8:68:E0:34|2|2|00|046.000
......類似上面這樣,很多行.......
我已經克服RegExp把資料都一個一個放進去了
目前我想要作一個功能
用滑鼠點下其中一行,然後我就可以抓到 我點下去那行的資訊 例如 client name或是 IP 等資訊
以下是我部份的code
可以用什麼東西去作這件事情呢?
請高手指點我,希望我沒選錯QtreewidgetItem 啊~~Q"Q
void MainWindow::Read_file (
QString Filename )
{
int get_count_n;
get_count_n= Count_line(Filename); // 去算原始資料到底有幾行
QString line;
QFile file(Filename);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
cout << "打開文件
出错." << endl;
}else {cout << "打開文件." << endl;}
QTextStream stream (&file);
for (int i =0; i<get_count_n-1 ; i++)//有幾行就add root 幾次
{
line = stream.readLine() ;
qDebug()<<line;
addRoot(line);
}
file.close();
}
input_line 就是所有的原始資料
我在用regexp把每一段 data擷取出來
放入指定的欄位
void MainWindow::addRoot(QString input_line )
{
QRegExp rxlen("(.*)[|](.*)[|](.*)[|](.*)[|](.*)[|](.*)[|](.*)[|](.*)[|](.*)[|](.*)[|](.*)[|](.*)");
// int pos = rxlen.indexIn("USB Server|||0|1|192.168.2.17|255.255.255.0|00:28:68:00:00:26|1|2|00|029.000");
int pos = rxlen.indexIn(input_line);
qDebug()<<pos;
qDebug()<<rxlen.capturedTexts();
qDebug()<<rxlen.captureCount();
qDebug()<< rxlen.cap(1);
qDebug()<< rxlen.cap(2);
qDebug()<< rxlen.cap(3);
qDebug()<< rxlen.cap(4);
qDebug()<< rxlen.cap(5);
qDebug()<< rxlen.cap(6);
qDebug()<< rxlen.cap(7);
qDebug()<< rxlen.cap(8);
qDebug()<< rxlen.cap(9);
qDebug()<< rxlen.cap(10);
qDebug()<< rxlen.cap(11);
qDebug()<< rxlen.cap(12);
QString clinet_name =rxlen.cap(1);
QString clinet_loc_name =rxlen.cap(2);
QString who_lock =rxlen.cap(3);
QString dhcp_status =rxlen.cap(4);
QString client_enu_status =rxlen.cap(5);
QString IP_addr =rxlen.cap(6);
QString netmask =rxlen.cap(7);
QString MAC_addr =rxlen.cap(8);
QString USB_dev_number =rxlen.cap(9);
QString client_status =rxlen.cap(10);
QString device_enu_status =rxlen.cap(11);
QString client_firmware_version =rxlen.cap(12);
QTreeWidgetItem *itm = new QTreeWidgetItem(ui->treeWidget);
itm->setText(0,clinet_name);
itm->setText(1,clinet_loc_name);
itm->setText(2,who_lock);
itm->setText(3,dhcp_status);
itm->setText(4,client_enu_status);
itm->setText(5,IP_addr);
itm->setText(6,netmask);
itm->setText(7,MAC_addr);
itm->setText(8,USB_dev_number);
itm->setText(9,client_status);
itm->setText(10,device_enu_status);
itm->setText(11,client_firmware_version);
ui->treeWidget->addTopLevelItem(itm);
}