1. 程式人生 > >QT固定檔名格式串轉化為TreeView在介面上展示檔案樹形目錄

QT固定檔名格式串轉化為TreeView在介面上展示檔案樹形目錄

獲得的檔案串格式:
file1/1 - sss.txt|file1/bin.zip|file2/linpanhu.docx|qmake_vc.bat|send.zip|
思路:====>>>
file1/1 - sss.txt
file1/bin.zip
file2/linpanhu.docx
qmake_vc.bat
send.zip

====>>>
file1 1 - sss.txt
file1 bin.zip
file2 linpanhu.docx
qmake_vc.bat
send.zip

====>>>
使用資料標識位置,掛在指定的ITem

//目錄樹的QStandardItem標識陣列,初始化置0,表示空
    for (int i = 0; i < 20; i++)
    {
        use[i] = 0;
    }

/*字串分割
* @param [in] 原字串,如“aaa|bbb|ccc|xxx|”
* @param [out] 返回分割後的字串列表
* @param [in] 分割的字元,如“|”
* @return  返回分割後的字串列表
*/
QList<QString> MainWindow::SplitString(const std::string& s, QList<QString> fileList, const
std::string& c) { std::string::size_type pos1, pos2; pos2 = s.find(c); pos1 = 0; while (std::string::npos != pos2) { fileList.append(QString::fromLocal8Bit(s.substr(pos1, pos2 - pos1).c_str())); //國際化,解決中文亂碼 pos1 = pos2 + c.size(); pos2 = s.find(c, pos1); } if
(pos1 != s.length()) fileList.append(QString::fromLocal8Bit(s.substr(pos1).c_str())); //新增最後一段 return fileList; } //載入樹型目錄 void MainWindow::loadTreeDir(QList<QString> fileList) { //載入樹形目錄 QStandardItemModel* model = new QStandardItemModel(ui->fileTreeView); //model->setHorizontalHeaderLabels(tr("檔案樹:")); //表頭 ui->fileTreeView->setModel(model); QList<QList<QString>> fileDirList; //檔案目錄列表 QSet<QString> fileDirSet = QSet<QString>(); //目錄集合 QVector<QString> fileDirSet2; //fileDirSet2.append("DTS_FILES"); for (int j = 0; j < fileList.size(); j++) { QList<QString> tempList; // tempList = SplitString(fileList.at(j).toLocal8Bit().toStdString(), tempList, "/"); //按照“/”分割 fileDirList.append(tempList); //存入目錄列表 tempList.clear();//關鍵,不clear會有殘留資料 } //sortDir(fileDirList); //目錄按級數排序 QStandardItem* itemp[20]; itemp[0] = new QStandardItem(tr("DTS_FILES")); //建立根目錄 itemp[0]->setIcon(QIcon(tr(":/images/dir_s.png"))); //設定icon model->setItem(0, 0, itemp[0]); //通過模型物件新增條目 for (int k = 0; k < fileDirList.size(); k++) { QList<QString> temp = fileDirList.at(k); for (int l = 0; l < temp.size(); l++) { if (!fileDirSet2.contains(temp.at(l))) { fileDirSet2.append(temp.at(l)); } } } int local = 0; //std::string ddd= ""; for (int ck = 0; ck < fileDirList.size(); ck++) { for (int m = 0; m < fileDirList.at(ck).size(); m++) { //ddd = fileDirList.at(ck).at(m).toStdString(); local = fileDirSet2.indexOf(fileDirList.at(ck).at(m)) + 1; ///值的位置,0的位置預設給DTS_FILES if (use[local] != 1)//表示沒有此節點 { itemp[local] = new QStandardItem(fileDirList.at(ck).at(m)); if (fileDirList.at(ck).at(m).contains(".")){ //是檔案 itemp[local]->setIcon(QIcon(tr(":/images/file_s.png"))); //設定icon } else { //是目錄 itemp[local]->setIcon(QIcon(tr(":/images/dir_s.png"))); //設定icon } //首位,一級目錄掛載在DTS_FILES下 if (m == 0) { use[local] = 1; //已經新增設為1 itemp[0]->appendRow(itemp[local]); } else { //找前面一個掛上 int frontLocal = fileDirSet2.indexOf(fileDirList.at(ck).at(m - 1)) + 1; itemp[frontLocal]->appendRow(itemp[local]); use[local] = 1; //已經添加了則設為1 } } } } showInfo(0, QString::fromLocal8Bit("載入目錄樹成功")); }