QListWidget添加item偶发的闪烁问题
目前在用Qt做一个聊天室的demo,通过QlistWidget来展示消息,但是我发现用setItemWidget的方式插入消息的时候会偶发QlistWidget闪烁的情况,这个怎么解决啊?
效果类似于这种
QListWidget类提供基于项目列表的小部件。
QListWidget提供类似于QListView提供的列表视图,但具有用于添加和删除项的经典的界面。 QListWidget使用内部模型来管理列表中的每个QListWidgetItem。
现在制作一个QListWidget的编辑器,编辑器的功能是:
1.新建列表并保存到.txt文件中。
2.打开已有的列表文件.txt,并读入。
3.对新建或已有的列表进行编辑(添加、删除、修改操作)
最终的主界面如下所示:
针对QListWidget添加item偶发的闪烁问题,可以尝试以下几个解决方案:
1.使用QStandardItemModel代替QListWidget,并设置选项卡风格
QStandardItemModel* model = new QStandardItemModel();
QListView* listView = new QListView();
listView->setModel(model);
listView->setStyleSheet("QListView::item{border: 0px;}"
"QListView::item:!selected:hover{background-color: #DDDDFF;}");
2.在添加item之前,先将QListWidget的视口设置为不被裁剪
ui->listWidget->setViewport(new QWidget);
ui->listWidget->setStyleSheet("border: none");
3.在添加item时,禁用QListWidget的自动布局,并手动调用doItemsLayout()进行布局
ui->listWidget->setBatchSize(100);
ui->listWidget->setUniformItemSizes(true);
ui->listWidget->setLayoutMode(QListView::Batched);
ui->listWidget->setWordWrap(true);
ui->listWidget->setSpacing(2);
ui->listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->listWidget->setResizeMode(QListView::Adjust);
ui->listWidget->setBatchSize(100);
// 禁用自动布局
ui->listWidget->setAutoScroll(false);
for (...) {
QListWidgetItem *item = new QListWidgetItem(ui->listWidget);
item->setSizeHint({-1, height});
auto widget = new QWidget(ui->listWidget);
...
ui->listWidget->setItemWidget(item, widget);
// 手动调用布局
ui->listWidget->doItemsLayout();
}
希望以上解决方案能够帮到你解决问题!