Python QWizard:删除已访问页面的历史记录

Python QWizard:删除已访问页面的历史记录,python,qt,pyqt,qwizard,Python,Qt,Pyqt,Qwizard,我正在做一个基本上遵循预定义结构的项目,比如状态机或向导。我偶然发现了QWizard,它的nextId函数似乎是让我的向导动态加载更多页面的好方法。现在,回到之前已经访问过的向导页面会非常好。但即使是超负荷的nextId,我也无法回到已经访问过的页面 是否可以清除已访问页面的历史记录?还是有更好的方法 我在Python中使用PyQt4的Qt,但这应该会有很大的不同。另一种方法是,我要向向导添加一个类似的页面,并用这个页面共享以前的数据,但大部分来自C++,我不喜欢创建模仿原始的虚拟对象。 编辑:

我正在做一个基本上遵循预定义结构的项目,比如状态机或向导。我偶然发现了QWizard,它的nextId函数似乎是让我的向导动态加载更多页面的好方法。现在,回到之前已经访问过的向导页面会非常好。但即使是超负荷的nextId,我也无法回到已经访问过的页面

是否可以清除已访问页面的历史记录?还是有更好的方法

我在Python中使用PyQt4的Qt,但这应该会有很大的不同。另一种方法是,我要向向导添加一个类似的页面,并用这个页面共享以前的数据,但大部分来自C++,我不喜欢创建模仿原始的虚拟对象。 编辑:
我试图用QWizard复制一个状态机,因为它几乎是一个状态机。例如,在第1页上加载数据,然后在第2页上进行可能扩展第1页数据的额外计算。通过使用“后退”按钮,我可以返回到第1页,但无法使用“下一步”按钮返回,因为此时已经访问了第1页。我通过重载nextId函数尝试了它,但它不起作用。这意味着我无法建立我想要的页面循环顺序。

我不确定我是否看到了您在这里提出的不同问题之间的逻辑联系。如果要返回已访问的页面,为什么要删除历史记录

通过重载QWizard或单独QWizardPages的nextID方法,您可以轻松实现所需的任何自定义访问顺序。使用hasVisitedPage方法确定某个页面是否已被访问。visitedPages按访问页面的顺序返回已访问页面的ID列表


您还需要什么?

我不确定您在这里提出的不同问题之间是否存在逻辑联系。如果要返回已访问的页面,为什么要删除历史记录

通过重载QWizard或单独QWizardPages的nextID方法,您可以轻松实现所需的任何自定义访问顺序。使用hasVisitedPage方法确定某个页面是否已被访问。visitedPages按访问页面的顺序返回已访问页面的ID列表


您还需要什么?

我过去也有类似的要求。我在C++开发了一个应用程序,它要求QWoMid对我的硬件设备进行许可和校准,并且发现QQuead中没有任何规定切换到以前访问过的页面/ID。 我在C++中提出了一个解决办法。但是,您可以轻松地移植到python。上面的文档显示pyqt有setStartId和restart方法。您可以使用它们在python中实现逻辑


我过去也有类似的要求。我在C++开发了一个应用程序,它要求QWoMid对我的硬件设备进行许可和校准,并且发现QQuead中没有任何规定切换到以前访问过的页面/ID。 我在C++中提出了一个解决办法。但是,您可以轻松地移植到python。上面的文档显示pyqt有setStartId和restart方法。您可以使用它们在python中实现逻辑

LicenseWizard::LicenseWizard(QWidget *parent)
    : QWizard(parent)
{
    setPage(Page_Intro, new IntroPage);
    setPage(Page_Evaluate, new EvaluatePage);
    setPage(Page_Register, new RegisterPage);
    setPage(Page_Details, new DetailsPage);
    setPage(Page_Conclusion, new ConclusionPage);

    setStartId(Page_Intro);

#ifndef Q_WS_MAC
    setWizardStyle(ModernStyle);
#endif
    setOption(HaveHelpButton, true);
    setPixmap(QWizard::LogoPixmap, QPixmap(":/images/logo.png"));

    connect(this, SIGNAL(helpRequested()), this, SLOT(showHelp()));
    QAbstractButton *b = this->button(QWizard::BackButton);
    connect(b, SIGNAL(clicked()), this, SLOT(goToSecondPage()));

    setWindowTitle(tr("License Wizard"));
}

void LicenseWizard::goToSecondPage()
{
    setStartId(Page_Evaluate);
    restart();
}