Как найти последующие (все) SLOT из подкласса - PullRequest
0 голосов
/ 27 мая 2020

Мне нужно заблокировать определенные c кнопки на MMI. Я реализовал функцию блокировки кнопок в подклассе QPushButton. Для этого я использовал сигнал clicked () и заблокировал кнопку с помощью blockSignals (true). Это означает, что при каждом нажатии кнопки на моем MMI всегда вызываются 2 СЛОТА.
Но при вызове блокировки определенной кнопки c я получаю первый СЛОТ (clicked ()) моего подкласса, в котором я заблокировать кнопку, затем я попадаю в исходный СЛОТ, связанный с этой кнопкой, который все еще вызывается, несмотря на блокировку (только в первый раз). Как я могу в своем подклассе QPushButton знать последующие слоты, связанные с этой кнопкой, и избегать их (удалять их)?

void QbtnStandardButton::slotButtonClicked(void)
{
    if (modeProtection)
    {
        // Special mode to protect/unprotect the button
        if (isProtected())
        {
            // Reset the protection
            this->blockSignals(false);
        }
        else
        {
            // Set the protection: button will be unclickable
            this->blockSignals(true);
        }
        modeProtection = false;
    }
    if (isProtected())
    {
        QMessageBox *pMsgBox = new QMessageBox(QMessageBox::Information,
                                  "Protection",
                                  "This button is protected!",
                                  QMessageBox::Ok);
        pMsgBox->exec();
        pMsgBox->deleteLater();
        // Here: remove subsequent SLOT of this button ?
    }
}

1 Ответ

0 голосов
/ 28 мая 2020

Я думаю, что найти СЛОТЫ, связанные с кнопкой, очень сложно, если вообще возможно. Я решил проблему, используя eventFilter () вместо SIGNAL () в моем базовом классе. В этом случае я могу отфильтровать событие «clicked ()» перед его повторной выдачей.

...