QCheckBox not displaying checked state



  • Hi all

    I have been developing a GUI, and have run into an issue (or possible bug) with a QCheckBox.

    Problem

    Adding a QCheckBox component to my form, compiling and running it has no issues. However, when clicking on the checkbox, no visible feedback is displayed.

    I added a listener for the clicked(bool) signal It is used in the debug output to display the current state, which does change.

    More Information

    Only 3 settings are changed on the checkbox:

    1. Component Text
    2. Component Name
    3. Component Checkedstate : Checked.

    I added another checkbox to the page, recompiled and ran it without changing anything. Again, this new checkbox does not respond to changes.

    Furthermore, I created a new project, added only a checkbox, compiled and ran it. Had no issues displaying the state change. Must be an issue with my project.

    Output of stateChanged(int) and clicked(bool) signals: (qDebug() output)

    QCHECKBOX STATE (stateChanged):  "2"
    QCHECKBOX STATE (clicked):  "checked"
    QCHECKBOX STATE (stateChanged):  "0"
    QCHECKBOX STATE (clicked):  "unchecked"
    QCHECKBOX STATE (stateChanged):  "2"
    QCHECKBOX STATE (clicked):  "checked"
    QCHECKBOX STATE (stateChanged):  "0"
    QCHECKBOX STATE (clicked):  "unchecked"
    

    If any additional project info is required, feel free to leave a comment


  • Moderators

    Weird case. Are you using QSS by any chance? Perhaps you ran into https://bugreports.qt.io/browse/QTBUG-48023



  • @sierdzio you are correct, after much searching, I found out that in the CSS, setting the QCheckBox::indicator color will mess with the checkbox mark.

    I will post a solution shortly

    Thanks for asking though!



  • Here is a possible solution for solving this "missing check/mark" issue.

    I implemented the CSS "indicator" solution I got from this qt form post which is problematic.

    Sources of solution:

    QPalette p = ui->checkBox->palette();
    p.setColor(QPalette::Active, QPalette::Base, QColor(255, 255, 255));
    p.setColor(QPalette::Button, QColor(255, 255, 255));
    ui->checkBox->setAutoFillBackground(true);
    ui->checkBox->setPalette(p);
    
    QColor(255, 255, 255)
    

    refers to your desired background color, possibly the same color as your window background, etc.

    QPallete::Active,  QPalette::base
    

    refers to the active checkbox's background (the white box background)

    QPalette::Button
    

    refers to the "actual background" (behind the checkbox and the checkbox text)

    Hope this helps!