为什么向 QListView 添加 stylesheet 会改变不是由 style sheet 本身决定的行为?

Why does adding stylesheet to QListView change behavior that is not determined by the style sheet itself?

我有一个 QListView,我使用以下样式表向其中添加了行分隔符:

listView_->setStyleSheet("QListView::item { border-bottom: 1px solid black; padding: 2px; }");

但是发生了意想不到的事情 - 单击列表中的任何项目,数据从显示中消失。双击返回。我觉得这很奇怪。为什么会这样?

这是 QListView

这是我点击任何项目后立即发生的情况:

刚刚消失的数据,当我双击(而不是单击 - 或选择操作)时又回来了

为什么会发生这种情况,我该如何避免?

视图中的每个项目都有状态,例如 selected 状态表示当前选中的项目。现在,如果您在没有附加任何样式表的情况下查看列表,您会注意到所选项目具有深蓝色背景和白色文本。但是,当您分配此样式表时

QListView::item { border-bottom: 1px solid black; padding: 2px; }

您实际上是一次修改所有状态,包括选定状态,这导致它具有默认的白色背景和白色文本。例如,如果您添加另一个 属性:

QListView::item { border-bottom: 1px solid black; padding: 2px; background:red; }

您会注意到,所有项目(包括选中的和未选中的)都将具有红色背景。要解决此问题,您应该指定您的样式表必须仅应用于未选择的项目

QListView::item:!selected{ border-bottom: 1px solid black; padding: 2px; }