Привет, ЛОР.
Программа – хеллоуворлд на Qt Widgets, на главное окно кинут QTableView. В классе объявлен указатель mdl на QStandardItemModel. В конструкторе после setupUi() пишем буквально следующее:
mdl = new QStandardItemModel(4, 4, this);
mdl->setItem(0, 0, new QStandardItem("One"));
mdl->setItem(1, 1, new QStandardItem("Two"));
mdl->setItem(2, 2, new QStandardItem("Three"));
ui->tableView->setModel(mdl);
ui->tableView->setShowGrid(false);
ui->tableView->setAlternatingRowColors(true);
ui->tableView->setStyleSheet(
QString("QTableView { alternate-background-color: %1; background: %2 }")
.arg("#b2b3ff").arg("#ffffff"));
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows);
Должна получиться примерно такая картинка. Скриншот взят из Qt 6 (Manjaro с последними обновлениями), но такой же результат виден и в Qt 5.15.3 (старая Федора), и в Qt 4.8 (специальные сборки).
А в Qt 5.15.19 (та же манжара с последними обновлениями) и 5.15.18 (Альт p11) картина меняется: в строках, подсвеченных «альтернативным» цветом, ячейки заключаются в какие-то страшные рамки. Принципиален вызов setSelectionBehavior(SelectRows): если выбрать выделение отдельных ячеек, эффекта нет. В Манжаре пробовал KDE как с Wayland-сессией, так и с X11, разницы нет (вот среды, отличные от KDE, ещё не пробовал).
Желающим навести критику на setStyleSheet(): он картины особо не меняет, если его закомментарить, просто пропадёт второй цвет, но страшные недорамки остаются.
И да, я в курсе про Qt5 EOL, но вроде бы как в последних версиях все такие мелочи должны были быть вычищены, а не наоборот?
И более того, я не уверен, что тут вообще виновата Qt, поскольку ещё в начале августа в манжаре всё было нормально. Потом в конце августа – начале сентября я был в отъезде, вернулся. На прошлой неделе обновился – и вот такое. А Qt 5.15.19 в манжару прилетела ещё в мае… Похоже на какие-то сопутствующие пакеты.
Кто сталкивался с подобным эффектом и куда копать? Да, вариант «отказаться от всех Qt, кроме Qt6» я знаю, мне он пока не интересен. Интересно понять, что за фигня.
Обновление: спасибо всем откликнувшимся! Это глюк стиля Breeze. Программное переключение на другой стиль посредством QApplication::setStyle() решает проблему.







