Qt:如何更改 QWizard 默认按钮
Qt: How to change QWizard default buttons
我正在 Fedora 系统 (unix) 上使用 Qt 4.8.5 编写程序。它是一个带有 QWizardPages 的 QWizard 结构。
我需要更改默认的 QWizard 按钮(返回、下一步、完成...)并对其进行自定义。我发现我可以将下一行放在我的 QWizard class 的构造函数上,称为 BaseWizard (class 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();
但是当我这样做时,changes.I 仍然无法看到 NextButon。我也试过首先使用 button_layout.clear();
来查看在添加按钮之前是否清理它,但没有。
我也试过更改 CustomButton1 的文本。如果我在调用 ChangeButtons 之后在 WP 中执行此操作
wizard()->button(QWizard::CustomButton1)->setText("TEXT CHANGED");
然后文本发生变化,但如果我将它放入带有 this->button(QWizard::CustomButton1)->setText("BBBBB");
的 ChangeButton() 函数中,它什么也不做(但它进入函数)。 Ofc 如果我尝试在 WP 中更改 CustomButton2 的文本,则不会发生任何事情,因为我仍然看不到该按钮... 17=]
非常感谢。
好的,我终于知道为什么我的程序崩溃了...我把解决方案放在这里,如果以后有人需要的话:
BaseWizard *bz; // <-- HERE is the problem
bz->ChangeButtons();
我没有初始化指针,因此必须将其更改为:
BaseWizard *bz = dynamic_cast<BaseWizard*>(wizard());
我正在 Fedora 系统 (unix) 上使用 Qt 4.8.5 编写程序。它是一个带有 QWizardPages 的 QWizard 结构。
我需要更改默认的 QWizard 按钮(返回、下一步、完成...)并对其进行自定义。我发现我可以将下一行放在我的 QWizard class 的构造函数上,称为 BaseWizard (class 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();
但是当我这样做时,changes.I 仍然无法看到 NextButon。我也试过首先使用 button_layout.clear();
来查看在添加按钮之前是否清理它,但没有。
我也试过更改 CustomButton1 的文本。如果我在调用 ChangeButtons 之后在 WP 中执行此操作
wizard()->button(QWizard::CustomButton1)->setText("TEXT CHANGED");
然后文本发生变化,但如果我将它放入带有 this->button(QWizard::CustomButton1)->setText("BBBBB");
的 ChangeButton() 函数中,它什么也不做(但它进入函数)。 Ofc 如果我尝试在 WP 中更改 CustomButton2 的文本,则不会发生任何事情,因为我仍然看不到该按钮... 17=]
非常感谢。
好的,我终于知道为什么我的程序崩溃了...我把解决方案放在这里,如果以后有人需要的话:
BaseWizard *bz; // <-- HERE is the problem
bz->ChangeButtons();
我没有初始化指针,因此必须将其更改为:
BaseWizard *bz = dynamic_cast<BaseWizard*>(wizard());