#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
возвращает список идентификаторов посещенных страниц в том порядке, в котором страницы были посещены.
Что еще вам нужно?