Qt: Как изменить кнопки QWizard по умолчанию

Я делаю программу с 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, ничего не происходит, потому что я до сих пор не вижу эту кнопку … поэтому любая идея о том, что я делаю неправильно или как я могу получить то, что я пытаюсь получить, будет очень цениться,

Огромное спасибо.

0

Решение

Хорошо, я наконец понял, почему моя программа зависала … Я поставил здесь решение, если оно кому-нибудь понадобится в будущем:

BaseWizard *bz; // <-- HERE is the problem
bz->ChangeButtons();

Я не инициализировал указатель, поэтому его нужно изменить на:

BaseWizard *bz = dynamic_cast<BaseWizard*>(wizard());
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]