listwidget 实现横向流式排布关键以及过滤注意事项

发布时间 2023-04-25 08:56:14作者: 大蔡一顿
   listWidget里面设置以下属性: 
  this->setViewMode(QListView::IconMode);
    this->setResizeMode(QListView::Adjust);
this->setMovement(QListView::Static);

流式排布过滤时需要注意:
在流式排布中过滤item采用隐藏的方式时,因为采用的是IconMode模式,所以偶尔会出现排版异常问题;
处理方式:在设置QListWidgetItem的对象隐藏时,如果QListWidgetItem的窗体是自定义的话,那么也需要把子窗体也一起隐藏; 如下:
    for(int i=0; i<this->count(); i++){
        QListWidgetItem *pItem = this->item(i);
        if ( pItem ){
            QWidget *pItemWidget = this->itemWidget(pItem);
            if ( !pItemWidget ) return ;
            CListItem *pClistItem = (CListItem*)(pItemWidget);
            bool isItemVisable = pClistItem->data().toString().contains(str, Qt::CaseSensitive);
            pItem->setHidden(!isItemVisable);
            pClistItem->setHidden(!isItemVisable);          //TODO: 注意: 使用IconMode模式时, 除开listWiget的item要隐藏外,自定义的widget也要隐藏
        }

}