gast23 hat geschrieben:Ein Beispiel (Finder Suchfilterzeilen)
http://www.geekology.co.za/blog/wp-cont ... search.jpg
Wenn man das prototypisch umsetzt (Ohne perfekter Code Gedanke)
Dann ist eine Zeile ein Widget. Ein Hostwidget hat zb ein VLayout.
Eine Zeile sendet plus und minus Signale. Diese sind z.B. mit zwei Slots des Hostwidget verbunden. In den Slots kannst du den sender casten (Ja böse, kein OOP

) und dann die entsprechende Aktion ausführen z.B. index+1 ein neue Zeile einfügen.
Mhh nö ... das wäre für mich ein Widget (A) das ein Widget(B) mit den Suchknöppen enthält, darunter ein TreeView.
Je Zeile in (B) ist ein eigenes Widget (Format (C), Datum (D), Bildgröße (BG), ...) je nach Auswahl (zB (C)==BILD) wird ein Signal an (B) geschickt das dann un/passende weitere Optionen ein/ausblendet. Ein Druck auf (+/-) würde ein Signal auslösen das über (B) and (A) weitergeleitet wird (vielleicht auch direkt an (A)) das dann eine entsprechende Suche (RegExp("pic_size:w>400")) anstößt.
Das TreeView bekommt als Model eine von QSortFilterProxyModel abgeleitete Klasse die mehrere SuchRegExps akzeptiert. Das ProxyModel bekommt ein QFileSystemModel als Model ... warscheinlich erweitert um eine Art "tagging" -> UserRole's für zB Bildgrößen, SoundLängen, ...
Ein clear würde alle FilterRegExps löschen.
Oder soll ein "+-" in (C,D,BG) einen weiteren Filter derselben "Art" ermöglichen? dann würde ich wohl "-" mit close() verbinden und Qt::WA_DeleteOnClose setzen (für jeden ausser der ersten Instanz dieses Widgets das ein disabled'tes "-" bekommt), "+" mit einem create() slot von (C,D,BG) der eine Kopie erstellt, diese dem selben parent zuweist und anschließend per Signal an (B) und einem passenden Slot in (B) dessen Eingliederung in das Layout anleiert.