2015-12-16 73 views
0

我正在Fedora系统(unix)上使用Qt 4.8.5编写程序。这是一个带有QWizardPages的QWizard结构。Qt:如何更改QWizard默认按钮

我需要更改默认的QWizard按钮(返回,下一步,完成...)并对其进行自定义。我发现我能做到这一点把我叫BaseWizard(类BaseWizard:公共QWizard)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中显示的按钮(和他们的文本),哪个是最好的办法呢?

我试过在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); 
} 

,然后用它喜欢(让我们称之为它WP):

BaseWizard *bz; 
bz->ChangeButtons(); 

但是,当我这样做,没有什么例如,我仍然可以看到NextButon。我已经尝试过使用第一个button_layout.clear();来查看是否在添加按钮之前清除它,但不是。

我也试过改变CustomButton1的文字。如果我在调用ChangeButtons之后在WP中执行 wizard()->button(QWizard::CustomButton1)->setText("TEXT CHANGED"); 然后文本发生变化,但是如果我将它放在ChangeButton()函数中并且this->button(QWizard::CustomButton1)->setText("BBBBB");它什么都不做(但它进入函数)。 Ofc如果我尝试在WP中更改CustomButton2的文本,则不会发生任何事情,因为我仍然无法看到该按钮...因此,对于我所做错的任何想法或我如何获得我所尝试的内容都将非常赞成,

非常感谢。

回答

0

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

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

我没有初始化的指针,因此必须改变,以:

BaseWizard *bz = dynamic_cast<BaseWizard*>(wizard()); 
相关问题