Я делаю программу с Qt 4.8.5 в системе Fedora (Unix). Это структура QWizard со своими QWizardPages.
Мне нужно было изменить стандартные кнопки QWizard (назад, далее, закончить …) и настроить их. Я обнаружил, что могу сделать это, поместив следующие строки в конструктор моего класса QWizard под названием BaseWizard (класс BaseWizard: public QWizard)
QList<QWizard::WizardButton> button_layout;
button_layout <<QWizard::Stretch << QWizard::CustomButton1 << QWizard::BackButton << QWizard::NextButton << QWizard::FinishButton;
this->setOptions(QWizard::NoDefaultButton);
При этом слева направо у меня есть одна пользовательская кнопка, кнопка «Назад», следующая кнопка и кнопка «Готово», и когда я хочу, я могу показать или скрыть пользовательские кнопки с помощью SetVisible() / SetDisabled() / setEnabled()
функции.
Это прекрасно работало для того, что я хотел до сих пор … Я должен внести некоторые изменения в программу, поэтому мне нужно менять эти кнопки в зависимости от страницы пользователя. Как я уже говорил, я знаю, что могу изменить видимость CustomButton 1, например, НО я не могу сделать то же самое с кнопкой назад, так что … мой вопрос: Как я могу решить, какие кнопки я показываю в каждой QWizardPage (и их текст), и какой лучший способ сделать это?
Я пытался создать функцию на моем BaseWizard
// Function to have only 2 custom buttons
void BaseWizard::ChangeButtons()
{
QList<QWizard::WizardButton> button_layout;
button_layout <<QWizard::Stretch << QWizard::CustomButton1 << QWizard::CustomButton2;
setButtonLayout(button_layout);
}
А затем в QWizardPage (назовем его WP), используя его так:
BaseWizard *bz;
bz->ChangeButtons();
Но когда я делаю это, ничего не меняется. Я все еще могу видеть NextButon, например. Я пытался также с помощью первого button_layout.clear();
чтобы увидеть, работает ли очистка перед добавлением кнопок, но не работает.
Я также попытался изменить текст CustomButton1. Если я сделаю это в WP после вызова ChangeButtons с
wizard()->button(QWizard::CustomButton1)->setText("TEXT CHANGED");
Затем текст изменится, но если я добавлю его в функцию ChangeButton () с this->button(QWizard::CustomButton1)->setText("BBBBB");
он ничего не делает (но входит в функцию). Часто, если я пытаюсь изменить текст CustomButton2 в WP, ничего не происходит, потому что я до сих пор не вижу эту кнопку … поэтому любая идея о том, что я делаю неправильно или как я могу получить то, что я пытаюсь получить, будет очень цениться,
Огромное спасибо.
Хорошо, я наконец понял, почему моя программа зависала … Я поставил здесь решение, если оно кому-нибудь понадобится в будущем:
BaseWizard *bz; // <-- HERE is the problem
bz->ChangeButtons();
Я не инициализировал указатель, поэтому его нужно изменить на:
BaseWizard *bz = dynamic_cast<BaseWizard*>(wizard());
Других решений пока нет …