Я запустил новый пустой проект (приложение QWidget). Ниже я помещаю код, который я вставил в mainwindow.cpp
for(int i = 0 ; i < 10 ; i++){
QPushButton* b = new QPushButton();
b->setCheckable(true);
b->setChecked(false);
ui->centralWidget->layout()->addWidget(b);
b->setStyleSheet(
"QPushButton { background-color: red; }\
QPushButton:checked { background-color: black;}");
connect(b, &QPushButton::toggled, [b](){qDebug() << "State changed to" << b->isChecked();});
Как видите, состояние меняется, но после снятия флажка кнопка остается синей.
Такое поведение вызвано стилем приложения KDE5 по умолчанию, который называется Breeze. Единственный обходной путь, который я обнаружил, — это изменение стиля на что-то другое (в моем случае это кислород).
Я также пытался обновить Plasma, но безуспешно.
Других решений пока нет …