我正在Fedora系统(unix)上用QT4.8.5编写一个程序。这是一个QWizard结构和它的QWizardPages。
我需要更改默认的QWizard按钮(back,next,finish.)并定制它。我发现我可以这样做,在我的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);这样,我从左到右拥有一个自定义按钮、后退按钮、next按钮和finish按钮,当我需要时,我可以使用SetVisible() / SetDisabled() / setEnabled()函数显示或隐藏自定义按钮。
直到现在我想要的一切都很完美..。我必须对程序做一些更改,所以我需要根据用户的页面来更改这些按钮。正如我前面所说的,我知道我可以改变CustomButton 1的可见性,但是我不能用back按钮做同样的事情,所以.我的问题是:,我如何决定在每个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调用wizard()->button(QWizard::CustomButton1)->setText("TEXT CHANGED");之后在WP中这样做,那么文本就会发生变化,但是如果我将它放在带有this->button(QWizard::CustomButton1)->setText("BBBBB");的ChangeButton()函数中,它就什么也不做了(只会将它输入funcion)。如果我试图更改WP中的CustomButton2文本,什么都不会发生,因为我仍然看不到那个按钮.所以任何关于我做错了什么或者怎么得到我尝试过的东西的想法都会被接受,
非常感谢。
发布于 2015-12-18 12:04:35
好吧,我终于知道为什么我的节目崩溃了.如果将来有人需要的话,我在这里提出了一个解决方案:
BaseWizard *bz; // <-- HERE is the problem
bz->ChangeButtons();我没有初始化指针,因此必须将其更改为:
BaseWizard *bz = dynamic_cast<BaseWizard*>(wizard());https://stackoverflow.com/questions/34309626
复制相似问题