2009年6月14日 星期日

QTreeWidgetItem取得上層(parent)的item text

QTreeWidgetItem要取得上一層的item text可用parent()這個函式,下面寫了好幾個方法都可取得,若要從目前這層取得到最上層只要一直parent(),用迴圈,讓後判斷是否是最上層既可,若是檔案tree,就能取得full path.

void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem* item, int column)

{
QString str1 = item->text(1); //取得第2欄text
QString str0 = item->text(0); //取得第1欄text
//QString str0 = ui->treeWidget->selectedItems().value(0)->text(0);//取得第1欄text
//QString str0 = ui->treeWidget->currentItem()->text(0); //取得第1欄text
//QString key = ui->treeWidget->currentItem()->parent()->text(0);//取得上層第1欄text
QString key = item->parent()->text(0);//取得上層第1欄text
QDir dir;
QString str2 = dir.filePath(key);
ui->listWidget->addItem(key); //把字串加到listWidget
}

下面就是一個取得檔案tree的full path,當我doubleclick,就能獲得item的檔案路徑.
QFileInfo fileInfo("/home/yplin66/qt");我是從qt目錄開展開.
只要判斷取得item text是否等於"qt",就應該終止迴圈,每取得一次text,就加到前面去,最後就是整個路徑了.

void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem* item, int column)
{
//QString str1 = item->text(1); //取得第2欄text
//QString str0 = item->text(0); //取得第1欄text
//QString str0 = ui->treeWidget->selectedItems().value(0)->text(0);//取得第1欄text
//QString str0 = ui->treeWidget->currentItem()->text(0);//取得第1欄text
//QString key = ui->treeWidget->currentItem()->parent()->text(0);//取得上層第1欄text
QString key; //QTreeWidgetItem item text
QString full_path; //檔案路徑
key = item->text(0);
full_path=key+"/";
while (key != "qt")
{
item=item->parent();
//取得上1層item
key = item->text(0); //取得上1層第1欄text
full_path=key+"/"+full_path;
}
ui->listWidget->addItem(full_path); //把字串加到listWidget
}
執行結果:(當然我最終是要獲得目錄下,所有檔案,加到list上,待續..)














終於寫完了,double click會把目錄下的檔案加到右邊的listWidget.(再來就來寫撥放音樂檔案)

void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem* item, int column)
{
//QString str1 = item->text(1); //取得第2欄text
//QString str0 = item->text(0); //取得第1欄text
//QString str0 = ui->treeWidget->selectedItems().value(0)->text(0);//取得第1欄text
//QString str0 = ui->treeWidget->currentItem()->text(0);//取得第1欄text
//QString key = ui->treeWidget->currentItem()->parent()->text(0);//取得上層第1欄text
QString key; //QTreeWidgetItem item text
QString full_path; //檔案路徑
key = item->text(0);
full_path=key+"/";
while (key != "qt")
{
item=item->parent(); //取得上1層item
key = item->text(0); //取得上1層第1欄text
full_path=key+"/"+full_path;

}
full_path="/home/yplin66/"+full_path;
QDir dir;
dir.setPath(full_path); //設到指定path
dir.setFilter(QDir::Files | QDir::NoSymLinks); //過濾檔案,目錄去掉
const QFileInfoList fileList = dir.entryInfoList(); //檔案資訊List
QFileInfo fileInfo(full_path);
QStringList fileColumn;
for (int i = 2; i < fileList.size(); i++) //0,1指. , ..故略過,一直到幾個檔案為止
{

fileInfo = fileList.at(i); //取得檔名
fileColumn.append(fileInfo.fileName()); //把檔名加到QStringList
;
}
ui->listWidget->clear();
ui->listWidget->addItems(fileColumn);//把QStringList加到listWidget

//ui->listWidget->addItem(full_path); //把字串加到listWidget
}


執行結果:

沒有留言: