Both those styles seem to be using this code: https://github.com/qt/qtstyleplugins/blob/master/src/plugins/styles/gtk2/qgtkstyle.cpp#L2790 GdkColor gdkText = gtk_widget_get_style(gtkRadioButton)->fg[labelState]; QColor textColor = QColor(gdkText.red>>8, gdkText.green>>8, gdkText.blue>>8); pal.setBrush(QPalette::WindowText, textColor); subopt.palette = pal; proxy()->drawControl(isRadio ? CE_RadioButtonLabel : CE_CheckBoxLabel, &subopt, painter, widget); I.e. the function that draws those widgets in those widget styles simply ignores whatever color the application set before. It just always builds its own color palette. It also uses real Gtk functions to do the actual drawing; it doesn't just emulate it, it uses the real thing. So this just does its own thing regardless of what the calling application wants it to do. Overriding the paint event to set the color before calling this style paint function would also not change anything; it always explicitly uses the default colors. This seems to be intentional by this widget style. IMHO this is still broken, but it's broken intentionally from upstream.