到目前,所分享的程序還是以功能爲主,還沒有點動成線的境界,更沒有線動成面了~
心得:昨天晚上又溫習了互斥量(鎖),又看了一遍臨界區、不變量和謂詞,結合三個程序員舀水的故事,那個水桶就是互斥量,而舀水的動作則是臨界區。
之前分享過使用qt QStorageInfo 類可以識別U盤,使用QListView可以顯示文件,今天把這兩個功能結合起來,並添加一個過濾文件的功能——識別U盤中特定後綴的文件。
環境: ubuntu + qt
主要對以下代碼做說明:
void Widget::on_pbn_refresh_clicked()
{
QString UDiskPath = "";
m_uDiskpath.clear();
foreach (const QStorageInfo &storage, QStorageInfo::mountedVolumes())
{
if (storage.isValid() && storage.isReady())
{
UDiskPath = storage.rootPath();
if(UDiskPath.contains("media")) // 是個U盤
{
m_uDiskpath = UDiskPath;
QStringList filters;
filters << "*.dh";
m_fileModel.setNameFilterDisables(false); //默認是失能
m_fileModel.setNameFilters(filters); //設置顯示的文件後綴
m_fileModel.setFilter(QDir::Files); //設置過濾屬性,只顯示文件
m_fileModel.setRootPath(UDiskPath); //設置文件所在路徑
ui->listView->setModel(&m_fileModel);
ui->listView->setViewMode(QListView::IconMode);
ui->listView->setRootIndex(m_fileModel.index(UDiskPath));
}
}
}
if(m_uDiskpath.isEmpty())
{
QMessageBox::critical(this, tr("Message"),
tr("U disk not find !"),
QMessageBox::Cancel|QMessageBox::Ok);
}
}
對程序的說明:遍歷存儲設備信息,如果發現路徑信息中含有media,則認定它是個U盤。好了,目前已經確定U盤的路徑了,接下來我想知道這個路徑下某些特定文件的後綴,比如以 .dh(大賀)結尾的,那怎麼辦呢?
之後百度到了QDir有過濾文件的功能,但是我想用QListView顯示,那QListView有沒有這個功能呢?試下一下,發現有,太好了。。嘟嘟嘟。。
m_fileModel.setNameFilterDisables(false); //默認是失能
m_fileModel.setNameFilters(filters); //設置顯示的文件後綴
m_fileModel.setFilter(QDir::Files); //設置過濾屬性,只顯示文件
m_fileModel.setRootPath(UDiskPath); //設置文件所在路徑
注意第一個屬性,默認是失能的,坑爹。。。
有好多知識要學習,學習使我快樂!
歡迎大家關注這個不正經的bug分享公衆號~~~和衆多小白一起成長~~~
對了,給大家看下運行結果圖,證明我沒有騙大家~
呀,識別到了.dh後綴的文件了呀
U 盤中的文件