'da görüntülenen öğeler için bir QLineEdit arama alanı oluşturma QListView'da gösterilen öğeleri filtreleyen bir arama alanı oluşturmak istiyorum. Temel olarak kullanıcı "foo" yazabilir ve DisplayRole'da sadece "foo" olan öğeler gösterilir.QListView
Zaten bu nasıl yapılacağı konusunda birkaç fikir var, ama QAbstractItem modelinde filtre ayarlandığını bazı sinyaller ve yuvaları kullanmak olacaktır I.
Benim fikirden daha tecrübeli olanlar isteyecektim ve QListView'da bir güncelleme() tetikleyin.
Filtreleme için QListView'da herhangi bir yardımcı yöntem var mı?
Karşılaştığım bu işin kurallı bir yolu var mı?
düzenlemek
Güncel ilerleme.
QFileSystemModel alt sınıfımda "updateFilter (QString)" adlı bir genel yuva oluşturdum. Sonra
connect(myQLineEditSearch, SIGNAL(textChanged(QString)),
myQFileSysModel, SLOT(updateFilter(QString)));
Sonra bu benim QFileSystemModel içinde, filtre ayarlar :: verileri (...) yöntemi, var:
void ComponentModel::updateFilter(QString filter)
{
_filter = filter;
emit layoutChanged();
}
QVariant ComponentModel::data(const QModelIndex &index, int role) const
{
QVariant result;
// if our search filter term is set and the item does not match,
// do not display item data. Searches are case insensitive
if (!_filter.isEmpty() &&
!QFileSystemModel::data(index, Qt::DisplayRole)
.toString().toLower().contains(_filter.toLower()))
{
return result;
}
result = QFileSystemModel::data(index, role);
return result;
}
Bu neredeyse yoktur. Çalıştığım "aksaklık", nesnenin görüntülendiği yer ile ilgili. Şu anda, listedeki 3. öğeyle eşleşen bir arama uygularsam yalnızca ilk iki satır boş olarak görüntülenir. Başka bir deyişle, hala eşleşmeyen öğeler için satırlar oluşturur.
Bu iyi görünüyor, ama aynı zamanda el ile arama butonuna tıklayarak kullanıcı bağımlı görünüyor ya da bunlardan bazıları.Qlistview'a canlı güncellemeler almaya çalışıyorum. Mevcut gelişmemi yansıtmak için yayınımı güncelledim. – jkyle