QWizard: удалить историю посещенных страниц

#python #qt #pyqt #qwizard

#python #qt #pyqt #qwizard

Вопрос:

Я работаю над проектом, который в основном следует заранее определенной структуре, такой как конечный автомат или мастер. Я наткнулся на QWizard, его функция NextID () показалась хорошим способом заставить мой мастер динамически загружать дальнейшие страницы. Теперь было бы очень неплохо вернуться к более ранним, уже посещенным страницам мастера. Но даже с перегруженным NextID() Я не могу вернуться к этим уже посещенным страницам.

Возможно ли очистить историю посещенных страниц? Или есть лучший способ сделать это?

Я использую Qt через PyQt4 в Python, но это должно иметь большое значение. Другим способом сделать то, что я прошу, было бы добавить похожую страницу в мастер и поделиться предыдущими данными с этой страницей, но, исходя в основном из C , мне не нравится способ создания фиктивных объектов, имитирующих оригиналы.

Редактировать: То, что я пытаюсь сделать, это скопировать конечный автомат с помощью QWizard (потому что это почти конечный автомат). Например, на странице 1 загружаются данные, затем на странице 2 выполняются дополнительные вычисления, которые потенциально расширяют данные страницы 1. С помощью кнопки «Назад» я могу вернуться на страницу 1, но я не могу «вернуться» с помощью кнопки «Далее», потому что страница 1 на данный момент уже посещена. Я попробовал это, перегрузив функции NextID (), но это не сработало. Это означает, что я не могу построить циклический порядок страниц, который я хотел бы сделать.

Ответ №1:

У меня были похожие требования в прошлом. Я разрабатывал приложение, в C котором требуется QWizard лицензирование и калибровка моего Hardware Device и обнаружил, что в QWizard нет положения о переключении на ранее посещенную страницу / идентификатор.

Я придумал обходной путь в 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();
}
  

Ответ №2:

Я не уверен, что вижу логическую связь между различными вопросами, которые вы здесь задаете. Если вы хотите вернуться к уже посещенным страницам, почему вы хотите удалить историю?

С помощью перегрузки nextID метода QWizard или отдельных QWizardPage страниц вы можете легко реализовать любой пользовательский порядок посещения, который вы пожелаете. Используйте hasVisitedPage метод, чтобы узнать, была ли уже посещена какая-либо страница. visitedPages возвращает список идентификаторов посещенных страниц в том порядке, в котором страницы были посещены.

Что еще вам нужно?