Important: Please read the Qt Code of Conduct -

Buttons in layout enabled but not accessible.

  • This post is deleted!

  • @SPlatten
    Continue back up the hierarchy of QWidget parents. I believe you will find one of them is disabled, and this results in descendants being disabled even if their own isEnabled() returns true?

  • @JonB, I've tried the following:

                QHBoxLayout* pobjHBox(qobject_cast<QHBoxLayout*>(mpobjLO));
                if ( pobjHBox != nullptr ) {
    bool blnEnabled(pobjButton->isEnabled()), blnLOEnabled(pobjHBox->isEnabled());
    qdbg() << blnEnabled << blnLOEnabled;

    mpobjLO is the layout containing the buttons, the layout containing this layout is most definitely enabled and other controls within the form are selectable and editable.

    The button is enabled, so is the layout, but the buttons appear greyed and I cannot click on them.

  • Try this although normally the button is disabled if their parents are disabled.
    qdbg() << pobjButton->isEnabled() << " " << pobjButton->parentWidget()->isEnabled() << " " << pobjButton->parentWidget()->parentWidget()->isEnabled() ;

  • @SPlatten
    What @JoeCFD has written is what I wanted you to check (widget parentage). Do that first.

    An alternative issue would be QButtonGroup::setExclusive(). Set that to false. Is that where your disablement is coming from?

  • @JonB & @JoeCFD , just added:

    qdbg() << "HACK: " << pobjButton->isEnabled() << " " << pobjButton->parentWidget()->isEnabled() << " " << pobjButton->parentWidget()->parentWidget()->isEnabled() ;

    I added "HACK:" so I can search the Application Output , the result is:

    S000000000068E000000161861T16:09:33.535DL00000139F../clsQtLayout.cpp[void clsQtLayout::addButton]
    HACK: true true true
    S000000000069E000000164553T16:09:36.227D:HACK: true true true
    S000000000070E000000165670T16:09:37.344D:HACK: true true true

    3 times because there are 3 buttons I the layout.

  • add the following in this class
    virtual void showEvent( QShowEvent * ) override;

    add your following code inside showEvent( )
    qdbg() << "HACK: " << pobjButton->isEnabled() << " " << pobjButton->parentWidget()->isEnabled() << " " << pobjButton->parentWidget()->parentWidget()->isEnabled() ;

    this will tell you if they are enabled or not when they are displayed.

  • @JoeCFD said in Buttons in layout enabled but not accessible.:

    virtual void showEvent( QShowEvent * ) override;

    The trouble is I've done something very clever or very stupid, several months ago and now I'm trying to revisit it and see what I've done, if I add another button which has different properties it works fine, so this is NOT a Qt issue.

  • @SPlatten showEvent( QShowEvent * ) is the final spot to check if they are enabled or not. It is a good place for layout debugging. After debugging, simply remove it.

  • @JoeCFD , thanks for your effort and time, I've found the problem now and it wasn't to do with Qt, just my memory and me being stupid.

Log in to reply