2009年6月13日 星期六

QTreeWidget和QTreeWidgetItem和取得QTreeWidgetItem的item text

這是從網路找到加以修改,當我doubleclik QTreeWidgetItem,會把QTreeWidgetItem的text加到listWidget item,這只是初步計畫,最終我是想要點目錄,把所有的檔都加到listWidget


MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent), ui(new Ui::MainWindow)

{

ui->setupUi(this);

//樹狀目錄

QFileInfo fileInfo("/home/yplin66/qt");

QStringList fileColumn;

fileColumn.append(fileInfo.fileName());

QTreeWidgetItem *dir = new QTreeWidgetItem(fileColumn);

ui->treeWidget->addTopLevelItem(dir);

dir->setIcon(0, QIcon("caterpillar_head.jpg"));

dir->setCheckState(0, Qt::Checked); // 設定可核取的方塊

listFile(dir, fileInfo);// 查詢目錄

}





void MainWindow::listFile(QTreeWidgetItem *parentWidgetItem, QFileInfo &parent) {

QDir dir;

dir.setPath(parent.filePath());

dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoSymLinks);//目錄和檔案都會顯示

//dir.setFilter(QDir::Dirs | QDir::NoSymLinks); //只顯示目錄

dir.setSorting(QDir::DirsFirst | QDir::Name);

const QFileInfoList fileList = dir.entryInfoList();

for (int i = 0; i <>

QFileInfo fileInfo = fileList.at(i);

QStringList fileColumn;

fileColumn.append(fileInfo.fileName());

if (fileInfo.fileName() == "." || fileInfo.fileName() == ".." ); // nothing

else if(fileInfo.isDir()) {

QTreeWidgetItem *child = new QTreeWidgetItem(fileColumn);

child->setIcon(0, QIcon("caterpillar_head.jpg"));

child->setCheckState(0, Qt::Checked);

parentWidgetItem->addChild(child);

// 查詢子目錄

listFile(child, fileInfo);

}

else {

fileColumn.append(QString::number(fileInfo.size()));

QTreeWidgetItem *child = new QTreeWidgetItem(fileColumn);

child->setIcon(0, QIcon("momor_head.jpg"));

child->setCheckState(0, Qt::Checked);

parentWidgetItem->addChild(child);

}

}

}



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

{

QString str1 = item->text(1); //取得第2欄text

QString str0 = item->text(0); //取得第1欄text

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

}
執行結果:

2 則留言:

Unknown 提到...

您好 我也是QT的初心者
想請教一下
想跟您一樣會顯示出好幾層的資料夾
這樣的for迴圈要怎麼表示呢

Unknown 提到...

我試了一下,應該是
for (int i = 0; i < fileList.count(); i++ )