Search code examples
qtcheckboxsignals-slotsqcheckbox

qcheckbox not changing checked state when clicked on


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

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.

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


Solution

  • 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:

    Example Implementation:

    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);
    

    the QColor(255, 255, 255) will be the background color you desire, e.g. your window background color.

    the QPallete::Active, QPalette::base refers to the active checkbox's background (the white box background)

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

    Hope this helps!