2

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

是否可以清除访问过的页面历史记录?还是有更好的方法来做到这一点?

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

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

4

2 回答 2

1

我过去也有类似的要求。我正在开发一个应用程序,C++其中需要QWizard我的许可和校准,Hardware Device发现在QWizard切换到以前访问的页面/ID 中没有任何规定。

我想出了一个解决方法C++。但是,您可以轻松移植到python. 此处显示的文档pyqt具有方法setStartIdrestart. 您可以使用它们来实现中的逻辑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();
}
于 2017-10-06T12:47:45.597 回答
0

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

借助重载 the或单独s 的nextID方法,您可以轻松实现所需的任何自定义访问顺序。使用该方法找出是否已经访问过某个页面。按照页面被访问的顺序返回访问页面的 ID 列表。QWizardQWizardPagehasVisitedPagevisitedPages

你还需要什么?

于 2011-04-26T09:56:48.943 回答