我正在开发一个基本遵循预定义结构的项目,比如状态机或向导。我偶然发现了QWizard,它的nextId()函数似乎是让我的向导动态地加载更多页面的好方法。现在,回到之前已经访问过的向导页面会非常好。但即使重载了nextId(),我也无法回到那些已经访问过的页面。
是否可以清除访问过的网页历史记录?或者有更好的方法吗?
我在Python中使用Pytt4的Qt,但这应该会产生很大的不同。另一种做我要求的方法是向向导添加一个类似的页面并与该页面共享以前的数据,但主要来自C ++,我不喜欢创建模仿原件的虚拟对象的方式。
修改 我要做的是用QWizard复制一个状态机(因为它几乎是一个状态机)。例如,在第1页上加载数据,然后在第2页上发生可能扩展第1页数据的其他计算。通过使用后退按钮,我可以返回到第1页,但是我无法使用下一个按钮“返回”,因为此时已经访问过第1页。我通过重载nextId()函数尝试了它,但它不起作用。这意味着我不能建立一个循环的页面顺序,我想这样做。
答案 0 :(得分:0)
我不确定我看到你在这里问的不同问题之间的逻辑联系。如果您想返回已访问过的页面,为什么要删除历史记录?
借助重载nextID
或单独QWizard
的{{1}}方法,您可以轻松实现所需的任何自定义访问顺序。使用QWizardPage
方法查看是否已访问某个页面。 hasVisitedPage
按照访问页面的顺序返回已访问页面的ID列表。
你还需要什么?
答案 1 :(得分:0)
我过去也有类似的要求。我正在C++
开发一个应用程序,需要QWizard
才能对Hardware Device
进行许可和校准,并发现QWizard
中没有任何条款可以切换到以前访问过的页面/ { ID。
我想出了C++
中的解决方法。但是,您可以轻松移植到python
。 here展示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();
}