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

2024-06-26 13:58:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

是否可以清除访问页面的历史记录?或者有更好的方法吗?在

我在Python中使用Qt by PyQt4,但这应该会有很大的不同。另一种方法是,我要向向导添加一个类似的页面,并用这个页面共享以前的数据,但大部分来自C++,我不喜欢创建模仿原始文档的虚拟对象。在

编辑: 我要做的是用QWizard复制一个状态机(因为它几乎是一个状态机)。例如,在第1页加载数据,然后在第2页上发生可能扩展第1页数据的额外计算。通过使用后退按钮,我可以返回到第1页,但是我不能用next按钮“返回”,因为此时已经访问了第1页。我尝试了重载nextId()函数,但它不起作用。这意味着我不能建立一个循环的页面顺序,我想这样做。在


Tags: 数据项目方法函数历史记录by动态页面
2条回答

我过去也有类似的要求。我在C++中开发了一个应用程序,它要求QWizard对我的Hardware Device进行许可和校准,结果发现{}中没有切换到以前访问过的页面/ID的规定

我在C++中想出了一个解决办法。但是,您可以轻松地移植到pythonhere上的文档显示pyqt有方法setStartId和{}。您可以使用它们来实现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();
}

我不知道你问的不同问题之间的逻辑联系。如果要返回已访问的页面,为什么要删除历史记录?在

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

你还需要什么?在

相关问题 更多 >