QWizardPage: как повторно отключить кнопку "Далее"
У меня есть QWizardPage
где пользователь должен пройти определенные шаги, в конце которых есть кнопка "Тест". Если пользователь нажимает эту кнопку, происходят две вещи:
Кнопка "Далее" активируется для перехода на следующую страницу
QWizard
, Это достигается путем подачи специального сигнала кнопки, который подключен кQWizardPage
:this->registerField("test*", m_button, "text", SIGNAL(testDone()));
m_button
происходит от QPushButton
с пользовательским сигналом testDone()
,
- Имя кнопки изменено на "Попробовать еще раз", чтобы предложить возможность повторить последовательность шагов снова и снова. Если пользователь нажимает кнопку, элементы графического интерфейса возвращаются в исходное состояние (кроме отключения кнопки "Далее" в
QWizard
).
Вопрос: для второго сценария, как я могу убедиться, что кнопка "Далее" отключена после того, как она была запущена testDone()
сигнал?
Я думал, если я отключу определенный сигнал testDone()
от QwizardPage
(после того, как это испущено), это дало бы желаемые результаты, однако, это не работало. Я пытался отключить все на QWizardPage
(например this->disconnect
), но это тоже не сработало. Есть другие идеи?
1 ответ
Чтобы контролировать готовность страниц, вы обычно переопределяете QWizardPage::isComplete
и сигнал меняется через QWizardPage::completeChanged
,
Итак, для вашего примера вы можете присвоить кнопке свойство и подключить его соответствующим образом:
class MyButton : public QPushButton
{
Q_OBJECT
Q_PROPERTY(bool ready READ isReady NOTIFY readyChanged)
public:
MyButton(QWidget *parent);
bool isReady() const;
signals:
void readyChanged();
};
Всякий раз, когда кнопка нажата или тесты завершены, подайте сигнал и верните желаемое состояние кнопки из функции isReady.
На вашей странице мастера переопределите isComplete
как:
bool isComplete() const {
return QWizardPage::isComplete() && myButton->isReady();
}
и подключите сигналы на своей странице:
connect(myButton, &MyButton::readyChanged, this, &MyPage::completeChanged);