簡體   English   中英

QT:使用QDtring在QTreeView / QFileSystemModel中搜索QModelIndex索引

[英]QT: Searching through QTreeView/QFileSystemModel with a QDtring for a QModelIndex index

我正在為用戶選擇一個自定義QDialog ,以選擇文件系統上的目錄。 我在QFIleSystemModel使用QTreeView 每當用戶在QTreeView選擇一個項目時,該目錄就會寫入QLineEdit 我的問題是,我想通過采用鍵入的文本擴展QTreeView節點來做相反的排序,如果...顯然,如果鍵入的文本是現有的絕對路徑,則可以擴展節點。

看看QDialog

我已經搜索了很多我的問題的變體(盡管我知道它的負載非常大),並且瀏覽了很多有關類的文檔,但是找不到任何真正可以幫助我的東西。 我猜我發現后需要使用QTreeView::expand(const QModelIndex)來擴展它們,但是QTreeView::expand(const QModelIndex)搜索索引是我最大的問題。 我願意征求任何建議,我們將不勝感激。 在此先感謝您,並很抱歉在此文字牆。

到目前為止,搜索索引是我最大的問題

索引只是模型中項目的“指針”。 您無法通過它進行搜索,因為索引中沒有任何內容。 它只是指向一個項目的指針。

您應該搜索模型 index(const QString & path)方法為您做到了。 給定路徑,它將在路徑末尾返回元素的索引。 然后,您可以向上迭代以擴展項目:

// ...because QModelIndex::operator= doesn't exist
QModelIndex & assign(QModelIndex & dst, const QModelIndex & src) {
  dst.~QModelIndex();
  new (&dst) QModelIndex(src);
  return dst;
}

void extend(const QString & path, QTreeView * view) {
  auto fs = qobject_cast<QFileSystemModel*>(view->model());
  if (!fs) return;
  auto idx = fs->index(path);
  // ascend up from the child item and expand items in the tree
  while (idx.isValid()) {
    view->expand(idx);
    assign(idx, idx.parent());
  }
}

您也可以在從路徑中刪除最后一項的情況下使用此方法,因為-大概-最后一項可能無效,因此fs->index可能會失敗。

你在這里檢查嗎?

[模型/視圖編程] [在QTreeView中插入和刪除行]

http://doc.qt.io/qt-4.8/model-view-programming.html QTreeView&QAbstractItemModel&insertRow

作為基本設計原則,View僅呈現數據。不要期望直接通過View修改數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM