Qt:如何更改QWizard默认按钮

时间:2015-12-16 10:32:14

标签: c++ qt qt4 custom-controls wizard

我正在使用Fedora系统(unix)上的Qt 4.8.5编写程序。这是一个带有QWizardPages的QWizard结构。

我需要更改默认的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()功能的自定义按钮。 / p>

到目前为止,我的工作非常完美......我必须对程序进行一些更改,因此我需要根据用户的页面更改这些按钮。正如我之前所说,我知道我可以改变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的文本。如果我在调用ChangeButtons后在WP中执行此操作 wizard()->button(QWizard::CustomButton1)->setText("TEXT CHANGED"); 然后文本发生了变化,但如果我把它放在带有this->button(QWizard::CustomButton1)->setText("BBBBB");的ChangeButton()函数中,它什么都不做(但是它进入了函数)。如果我试图在WP中更改CustomButton2的文本没有任何反应,因为我仍然看不到那个按钮......所以我对错误的看法或者我怎样才能得到我想要的东西都会非常贬值,

非常感谢你。

1 个答案:

答案 0 :(得分:0)

好的,我终于知道为什么我的程序崩溃......如果有人在将来需要它,我会把解决方案放在这里:

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

我没有初始化指针,因此必须将其更改为:

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