QWizard: удалить историю посещенных страниц - PullRequest
2 голосов
/ 26 апреля 2011

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 06 октября 2017

У меня были подобные требования в прошлом. Я разрабатывал приложение в C++, для которого требуется QWizard для лицензирования и калибровки моего Hardware Device, и обнаружил, что в QWizard нет положения для переключения на ранее посещенную страницу / 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();
}
0 голосов
/ 26 апреля 2011

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

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

Что еще нужно?

...