이 페이지에서

QWizard Class

QWizard 클래스는 마법사를 위한 프레임워크를 제공합니다. 더 보기...

헤더: #include <QWizard>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속: QDialog

공개 유형

enum WizardButton { BackButton, NextButton, CommitButton, FinishButton, CancelButton, …, Stretch }
enum WizardOption { IndependentPages, IgnoreSubTitles, ExtendedWatermarkPixmap, NoDefaultButton, NoBackButtonOnStartPage, …, StretchBanner }
flags WizardOptions
enum WizardPixmap { WatermarkPixmap, LogoPixmap, BannerPixmap, BackgroundPixmap }
enum WizardStyle { ClassicStyle, ModernStyle, MacStyle, AeroStyle }

속성

공개 함수

QWizard(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
virtual ~QWizard()
int addPage(QWizardPage *page)
QAbstractButton *button(QWizard::WizardButton which) const
QString buttonText(QWizard::WizardButton which) const
int currentId() const
QWizardPage *currentPage() const
QVariant field(const QString &name) const
bool hasVisitedPage(int id) const
virtual int nextId() const
QWizard::WizardOptions options() const
QWizardPage *page(int id) const
QList<int> pageIds() const
QPixmap pixmap(QWizard::WizardPixmap which) const
void removePage(int id)
void setButton(QWizard::WizardButton which, QAbstractButton *button)
void setButtonLayout(const QList<QWizard::WizardButton> &layout)
void setButtonText(QWizard::WizardButton which, const QString &text)
void setDefaultProperty(const char *className, const char *property, const char *changedSignal)
void setField(const QString &name, const QVariant &value)
void setOption(QWizard::WizardOption option, bool on = true)
void setOptions(QWizard::WizardOptions options)
void setPage(int id, QWizardPage *page)
void setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap)
void setSideWidget(QWidget *widget)
void setStartId(int id)
void setSubTitleFormat(Qt::TextFormat format)
void setTitleFormat(Qt::TextFormat format)
void setWizardStyle(QWizard::WizardStyle style)
QWidget *sideWidget() const
int startId() const
Qt::TextFormat subTitleFormat() const
bool testOption(QWizard::WizardOption option) const
Qt::TextFormat titleFormat() const
virtual bool validateCurrentPage()
QList<int> visitedIds() const
QWizard::WizardStyle wizardStyle() const

재구현된 공용 함수

virtual void setVisible(bool visible) override
virtual QSize sizeHint() const override

공개 슬롯

void back()
void next()
void restart()
void setCurrentId(int id)

신호

void currentIdChanged(int id)
void customButtonClicked(int which)
void helpRequested()
void pageAdded(int id)
void pageRemoved(int id)

보호된 함수

virtual void cleanupPage(int id)
virtual void initializePage(int id)

재구현된 보호 함수

virtual void done(int result) override
virtual bool event(QEvent *event) override
virtual bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result) override
virtual void paintEvent(QPaintEvent *event) override
virtual void resizeEvent(QResizeEvent *event) override

상세 설명

마법사(macOS에서는 어시스턴트라고도 함)는 일련의 페이지로 구성된 특수한 유형의 입력 대화 상자입니다. 마법사의 목적은 사용자가 과정을 단계별로 수행할 수 있도록 안내하는 것입니다. 마법사는 사용자가 익히기 어려울 수 있는 복잡하거나 자주 수행하지 않는 작업에 유용합니다.

QWizard는 QDialog 를 상속받으며 마법사를 나타냅니다. 각 페이지는 QWizardPage ( QWidget 의 하위 클래스)입니다. 사용자 정의 마법사를 만들려면 이러한 클래스를 직접 사용하거나, 더 세밀한 제어를 위해 하위 클래스를 생성할 수 있습니다.

간단한 예제

다음 예제는 마법사 페이지를 생성하고 이를 마법사에 추가하는 방법을 보여줍니다. 더 고급 예제는 라이선스 마법사를 참조하십시오.

QWizardPage *createIntroPage()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle("Introduction");

    QLabel *label = new QLabel("This wizard will help you register your copy "
                               "of Super Product Two.");
    label->setWordWrap(true);

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(label);
    page->setLayout(layout);

    return page;
}

QWizardPage *createRegistrationPage()
{
    ...
}

QWizardPage *createConclusionPage()
{
    ...
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

#if QT_CONFIG(translation)
    QTranslator translator;
    for (const QString &trPath : QLibraryInfo::paths(QLibraryInfo::TranslationsPath)) {
        if (translator.load(QLocale(), u"qtbase"_s, u"_"_s, trPath)) {
            app.installTranslator(&translator);
            break;
        }
    }
#endif

    QWizard wizard;
    wizard.addPage(createIntroPage());
    wizard.addPage(createRegistrationPage());
    wizard.addPage(createConclusionPage());

    wizard.setWindowTitle("Trivial Wizard");
    wizard.show();

    return app.exec();
}

마법사의 디자인 및 사용자 경험

QWizard는 네 가지 마법사 디자인을 지원합니다:

setWizardStyle()을 사용하여 적용할 디자인을 명시적으로 설정할 수 있습니다(예: 모든 플랫폼에서 동일한 디자인을 사용하려는 경우).

참고: AeroStyle 는 알파 합성이 활성화된 Windows Vista 시스템에서만 효과가 있습니다. 이 조건이 충족되지 않을 경우 ModernStyle 가 대체 방식으로 사용됩니다.

마법사 스타일 외에도 마법사의 모양과 느낌을 제어하는 여러 옵션이 있습니다. 이러한 옵션은 setOption() 또는 setOptions()를 사용하여 설정할 수 있습니다. 예를 들어, HaveHelpButton 을 사용하면 QWizard가 다른 마법사 버튼들과 함께 Help 버튼을 표시합니다.

setButtonLayout()을 사용하여 마법사 버튼의 순서를 임의로 변경할 수도 있으며, 버튼 행에 최대 세 개의 사용자 정의 버튼(예: Print 버튼)을 추가할 수 있습니다. 이를 위해서는 CustomButton1, CustomButton2 또는 CustomButton3 매개변수를 사용하여 버튼을 설정하고, setButton() 또는 setButtonText()을 호출한 다음, HaveCustomButton1, HaveCustomButton2 또는 HaveCustomButton3 옵션을 활성화하면 됩니다. 사용자가 사용자 정의 버튼을 클릭할 때마다 customButtonClicked()이 발생합니다. 예를 들어:

        wizard()->setButtonText(QWizard::CustomButton1, tr("&Print"));
        wizard()->setOption(QWizard::HaveCustomButton1, true);
        connect(wizard(), &QWizard::customButtonClicked,
                this, &ConclusionPage::printButtonClicked);

마법사 페이지의 요소

마법사는 일련의 ` QWizardPage`로 구성됩니다. 어떤 시점에서도 하나의 페이지만 표시됩니다. 페이지에는 다음과 같은 속성이 있습니다:

아래 다이어그램은 이러한 속성이 모두 존재하고 ModernStyle 가 사용된다고 가정할 때, QWizard가 이러한 속성을 어떻게 렌더링하는지 보여줍니다:

마법사 페이지의 속성

subTitle 가 설정되면, QWizard는 이를 헤더에 표시하며, 이 경우 BannerPixmap 및 LogoPixmap 를 사용하여 헤더를 꾸밉니다. WatermarkPixmap 는 헤더 아래쪽 왼쪽에 표시됩니다. 하단에는 사용자가 페이지를 탐색할 수 있는 일련의 버튼이 있습니다.

페이지 자체( QWizardPage 위젯)는 헤더, 워터마크, 버튼 행 사이의 영역을 차지합니다. 일반적으로 페이지는 QWizardPage 이며, 여기에 QGridLayout 이 설치되어 있고 표준 하위 위젯(QLabel, QLineEdit등)이 포함되어 있습니다.

마법사의 스타일이 MacStyle 인 경우, 페이지의 모습은 완전히 달라집니다:

MacStyle을 사용하는 마법사 페이지의 속성

MacStyle 는 워터마크, 배너 및 로고 픽스맵을 무시합니다. BackgroundPixmap 가 설정되어 있으면 이를 마법사의 배경으로 사용하며, 그렇지 않은 경우 기본 "assistant" 이미지가 사용됩니다.

제목과 부제는 개별 페이지에서 ` QWizardPage::setTitle()` 및 ` QWizardPage::setSubTitle()`를 호출하여 설정합니다. 이들은 일반 텍스트나 HTML일 수 있습니다( titleFormat 및 subTitleFormat 참조). 픽스맵은 ` setPixmap()`를 사용하여 전체 마법사에 대해 전역적으로 설정하거나, ` QWizardPage::setPixmap()`를 사용하여 페이지별로 설정할 수 있습니다.

필드 등록 및 사용

많은 마법사에서 한 페이지의 내용이 다음 페이지 필드의 기본값에 영향을 미칠 수 있습니다. 페이지 간 통신을 용이하게 하기 위해 QWizard는 페이지에 필드(예: QLineEdit)를 등록하고 어떤 페이지에서든 해당 값에 접근할 수 있게 해주는 “필드” 메커니즘을 지원합니다. 또한 필수 필드(즉, 사용자가 다음 페이지로 넘어가기 전에 반드시 입력해야 하는 필드)를 지정할 수도 있습니다.

필드를 등록하려면 QWizardPage::registerField() field를 호출하십시오. 예를 들면 다음과 같습니다:

    registerField("evaluate.name*", nameLineEdit);
    registerField("evaluate.email*", emailLineEdit);

위의 코드는 className, baseClass, qobjectMacro 라는 세 개의 필드를 등록하며, 이 필드들은 세 개의 자식 위젯과 연결되어 있습니다. className 옆의 별표(*)는 필수 입력 필드를 나타냅니다.

어떤 페이지의 필드든 다른 페이지에서 접근할 수 있습니다. 예를 들어:

void ConclusionPage::initializePage()
{
    QString licenseText;

    if (wizard()->hasVisitedPage(LicenseWizard::Page_Evaluate)) {
        licenseText = tr("<u>Evaluation License Agreement:</u> "
                         "You can use this software for 30 days and make one "
                         "backup, but you are not allowed to distribute it.");
    } else if (wizard()->hasVisitedPage(LicenseWizard::Page_Details)) {
        const QString emailAddress = field("details.email").toString();
        licenseText = tr("<u>First-Time License Agreement:</u> "
                         "You can use this software subject to the license "
                         "you will receive by email sent to %1.").arg(emailAddress);
    } else {
        licenseText = tr("<u>Upgrade License Agreement:</u> "
                         "This software is licensed under the terms of your "
                         "current license.");
    }
    bottomLabel->setText(licenseText);
}

여기서는 QWizardPage::field()를 호출하여 details.email 필드( DetailsPage 에서 정의됨)의 내용에 접근하고, 이를 사용하여 ConclusionPage 를 초기화합니다. 필드의 내용은 QVariant 로 반환됩니다.

QWizardPage::registerField()를 사용하여 필드를 생성할 때는 고유한 필드 이름과 위젯을 전달합니다. 또한 세 번째 및 네 번째 인수로 Qt 속성 이름과 “changed” 시그널(속성이 변경될 때 발송되는 시그널)을 지정할 수도 있습니다. 하지만 QLineEdit, QCheckBox, QComboBox 과 같은 가장 일반적인 Qt Widgets의 경우, QWizard가 어떤 속성을 찾아야 할지 알고 있으므로 이 작업은 필요하지 않습니다.

속성을 등록할 때 이름 뒤에 별표(*)를 붙이면 해당 필드는 필수 필드가 됩니다. 페이지에 필수 필드가 있는 경우, 모든 필수 필드가 입력된 경우에만 Next 및/또는 Finish 버튼이 활성화됩니다.

필드를 “입력된” 것으로 간주하기 위해, QWizard는 해당 필드의 현재 값이 원래 값( initializePage()이 호출되었을 때의 값)과 같지 않은지 간단히 확인합니다. QLineEdit 및 QAbstractSpinBox 하위 클래스의 경우, QWizard는 유효성 검사기나 마스크를 적용하기 위해 hasAcceptableInput()이 true를 반환하는지 추가로 확인합니다.

QWizard의 필수 필드 메커니즘은 편의성을 위해 제공됩니다. 더 강력하지만(동시에 더 번거로운) 대안은 QWizardPage::isComplete()을 재구현하고, 페이지가 완성되거나 미완성 상태가 될 때마다 QWizardPage::completeChanged() 신호를 발생시키는 것입니다.

Next 및/또는 Finish 버튼의 활성화/비활성화 상태는 사용자 입력에 대한 유효성 검사를 수행하는 한 가지 방법입니다. 또 다른 방법은 validateCurrentPage() (또는 QWizardPage::validatePage()) 함수를 재구현하여 마지막 단계에서 유효성 검사를 수행하고(사용자가 정보를 불완전하거나 유효하지 않게 입력한 경우 오류 메시지를 표시), 함수가 true 를 반환하면 다음 페이지가 표시되거나(또는 마법사가 종료되며), 그렇지 않으면 현재 페이지가 유지됩니다.

선형 마법사 만들기

대부분의 마법사는 1페이지 다음에 2페이지가 이어지고, 마지막 페이지까지 순차적으로 진행되는 선형 구조를 가집니다. 'Trivial Wizard' 예제는 이러한 유형의 마법사입니다. QWizard를 사용하면 QWizardPage객체를 인스턴스화하고 addPage()를 사용하여 삽입함으로써 선형 마법사를 생성할 수 있습니다. 기본적으로 페이지는 추가된 순서대로 표시됩니다. 예를 들면 다음과 같습니다.

    QWizard wizard;
    wizard.addPage(createIntroPage());
    wizard.addPage(createRegistrationPage());
    wizard.addPage(createConclusionPage());

페이지가 표시되기 직전, QWizard는 initializePage()를 호출하여(이는 다시 QWizardPage::initializePage()를 호출함) 페이지에 기본값을 채웁니다. 기본적으로 이 함수는 아무 작업도 수행하지 않지만, 다른 페이지의 필드를 기반으로 페이지 내용을 초기화하도록 재구현할 수 있습니다( example above 참조).

사용자가 Back 을 누르면 cleanupPage()이 호출되며(이는 다시 QWizardPage::cleanupPage()을 호출합니다), 기본 구현에서는 페이지의 필드를 원래 값( initializePage()이 호출되기 전의 값)으로 재설정합니다. Back 버튼이 값을 지우지 않고 사용자가 입력한 값을 유지하도록 하려면, IndependentPages 옵션을 활성화하기만 하면 됩니다.

비선형 마법사 만들기

일부 마법사는 사용자가 제공한 정보에 따라 서로 다른 진행 경로를 허용한다는 점에서 더 복잡합니다. ‘라이선스 마법사(License Wizard )’ 예제가 이를 잘 보여줍니다. 이 예제는 여러 마법사 페이지를 제공하며, 사용자가 선택한 옵션에 따라 서로 다른 페이지로 이동할 수 있습니다.

복합 마법사 페이지 흐름도

복잡한 마법사의 경우, 페이지는 ID로 식별됩니다. 이러한 ID는 일반적으로 열거형(enum)을 사용하여 정의됩니다. 예를 들면 다음과 같습니다.

class LicenseWizard : public QWizard
{
    ...
    enum { Page_Intro, Page_Evaluate, Page_Register, Page_Details,
           Page_Conclusion };
    ...
};

페이지는 ID와 ` QWizardPage `(또는 그 하위 클래스)의 인스턴스를 매개변수로 받는 ` setPage()` 메서드를 사용하여 삽입됩니다.

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);
    ...
}

기본적으로 페이지는 ID가 작은 순서대로 표시됩니다. 사용자가 선택한 옵션에 따라 동적으로 순서를 변경하려면 QWizardPage::nextId() 메서드를 재구현해야 합니다. 예를 들어:

int IntroPage::nextId() const
{
    if (evaluateRadioButton->isChecked()) {
        return LicenseWizard::Page_Evaluate;
    } else {
        return LicenseWizard::Page_Register;
    }
}

int EvaluatePage::nextId() const
{
    return LicenseWizard::Page_Conclusion;
}

int RegisterPage::nextId() const
{
    if (upgradeKeyLineEdit->text().isEmpty()) {
        return LicenseWizard::Page_Details;
    } else {
        return LicenseWizard::Page_Conclusion;
    }
}

int DetailsPage::nextId() const
{
    return LicenseWizard::Page_Conclusion;
}

int ConclusionPage::nextId() const
{
    return -1;
}

QWizard::nextId() 재구현에 모든 로직을 한 곳에 모아 둘 수도 있습니다. 예를 들면 다음과 같습니다:

int LicenseWizard::nextId() const
{
    switch (currentId()) {
    case Page_Intro:
        if (field("intro.evaluate").toBool()) {
            return Page_Evaluate;
        } else {
            return Page_Register;
        }
    case Page_Evaluate:
        return Page_Conclusion;
    case Page_Register:
        if (field("register.upgradeKey").toString().isEmpty()) {
            return Page_Details;
        } else {
            return Page_Conclusion;
        }
    case Page_Details:
        return Page_Conclusion;
    case Page_Conclusion:
    default:
        return -1;
    }
}

ID가 가장 작은 페이지가 아닌 다른 페이지에서 시작하려면 setStartId()을 호출하십시오.

페이지가 방문되었는지 여부를 확인하려면 hasVisitedPage()를 호출하십시오. 예를 들어:

void ConclusionPage::initializePage()
{
    QString licenseText;

    if (wizard()->hasVisitedPage(LicenseWizard::Page_Evaluate)) {
        licenseText = tr("<u>Evaluation License Agreement:</u> "
                         "You can use this software for 30 days and make one "
                         "backup, but you are not allowed to distribute it.");
    } else if (wizard()->hasVisitedPage(LicenseWizard::Page_Details)) {
        const QString emailAddress = field("details.email").toString();
        licenseText = tr("<u>First-Time License Agreement:</u> "
                         "You can use this software subject to the license "
                         "you will receive by email sent to %1.").arg(emailAddress);
    } else {
        licenseText = tr("<u>Upgrade License Agreement:</u> "
                         "This software is licensed under the terms of your "
                         "current license.");
    }
    bottomLabel->setText(licenseText);
}

QWizardPage, 간단한 마법사 예제 및 라이선스 마법사 예제도참조하십시오 .

멤버 유형 문서

enum QWizard::WizardButton

이 열거형은 마법사에 포함된 버튼을 지정합니다.

상수값설명
QWizard::BackButton0Back 버튼(macOS에서는Go Back )
QWizard::NextButton1Next 버튼 (macOS에서는Continue )
QWizard::CommitButton2Commit 버튼
QWizard::FinishButton3Finish 버튼 (macOS에서는Done )
QWizard::CancelButton4Cancel 버튼 ( NoCancelButton 도 참조)
QWizard::HelpButton5Help 버튼 ( HaveHelpButton 참조)
QWizard::CustomButton16첫 번째 사용자 정의 버튼 ( HaveCustomButton1 도 참조)
QWizard::CustomButton27두 번째 사용자 정의 버튼 ( HaveCustomButton2 참조)
QWizard::CustomButton38세 번째 사용자 정의 버튼 ( HaveCustomButton3 도 참조)

다음 값은 setButtonLayout()를 호출할 때만 유용합니다:

상수값설명
QWizard::Stretch9버튼 레이아웃에서 가로 방향으로 늘리기

setButton(), setButtonText(), setButtonLayout(), customButtonClicked()도 참조하십시오 .

enum QWizard::WizardOption
flags QWizard::WizardOptions

이 열거형은 마법사의 모양과 느낌에 영향을 미치는 다양한 옵션을 지정합니다.

상수값설명
QWizard::IndependentPages0x00000001페이지들은 서로 독립적입니다(즉, 서로에게서 값을 파생하지 않습니다).
QWizard::IgnoreSubTitles0x00000002설정되어 있더라도 부제목을 표시하지 않습니다.
QWizard::ExtendedWatermarkPixmap0x00000004WatermarkPixmap 을 창 가장자리까지 확장합니다.
QWizard::NoDefaultButton0x00000008Next 또는 Finish 버튼을 대화 상자의 default button 로 설정하지 마십시오.
QWizard::NoBackButtonOnStartPage0x00000010시작 페이지에 ‘ Back ’ 버튼을 표시하지 마십시오.
QWizard::NoBackButtonOnLastPage0x00000020마지막 페이지에는 ' Back ' 버튼을 표시하지 마십시오.
QWizard::DisabledBackButtonOnLastPage0x00000040마지막 페이지에서 ' Back ' 버튼을 비활성화합니다.
QWizard::HaveNextButtonOnLastPage0x00000080마지막 페이지에 (비활성화된) ‘ Next ’ 버튼을 표시합니다.
QWizard::HaveFinishButtonOnEarlyPages0x00000100마지막 페이지가 아닌 페이지에 (비활성화된) ‘ Finish ’ 버튼을 표시합니다.
QWizard::NoCancelButton0x00000200Cancel 버튼을 표시하지 않습니다.
QWizard::CancelButtonOnLeft0x00000400Cancel 버튼을 Back 의 왼쪽에 배치합니다( Finish 또는 Next 의 오른쪽이 아닌).
QWizard::HaveHelpButton0x00000800' Help ' 버튼을 표시하십시오.
QWizard::HelpButtonOnRight0x00001000' Help ' 버튼을 버튼 레이아웃의 맨 오른쪽(맨 왼쪽이 아닌)에 배치하십시오.
QWizard::HaveCustomButton10x00002000첫 번째 사용자 정의 버튼(CustomButton1)을 표시합니다.
QWizard::HaveCustomButton20x00004000두 번째 사용자 정의 버튼(CustomButton2)을 표시합니다.
QWizard::HaveCustomButton30x00008000세 번째 사용자 정의 버튼(CustomButton3)을 표시합니다.
QWizard::NoCancelButtonOnLastPage0x00010000마지막 페이지에서는 ' Cancel ' 버튼을 표시하지 않습니다.
QWizard::StretchBanner0x00020000banner 이 있는 경우, 마법사의 전체 너비에 걸쳐 확장합니다.

WizardOptions 유형은 QFlags<WizardOption>에 대한 typedef입니다. 이 유형은 WizardOption 값들의 OR 조합을 저장합니다.

setOptions(), setOption() 및 testOption()도 참조하십시오 .

enum QWizard::WizardPixmap

이 열거형은 페이지에 연결될 수 있는 픽스맵을 지정합니다.

상수값설명
QWizard::WatermarkPixmap0ClassicStyle 또는 ModernStyle 페이지의 왼쪽에 있는 세로로 긴 픽스맵
QWizard::LogoPixmap1ClassicStyle 또는 ModernStyle 페이지 헤더의 오른쪽에 있는 작은 픽스맵
QWizard::BannerPixmap2ModernStyle 페이지 헤더의 배경을 차지하는 픽스맵
QWizard::BackgroundPixmap3MacStyle 마법사의 배경을 차지하는 픽스맵

setPixmap(), QWizardPage::setPixmap(), Elements of a Wizard Page항목도 참조하십시오 .

enum QWizard::WizardStyle

이 열거형은 QWizard 에서 지원하는 다양한 디자인을 지정합니다.

상수값설명
QWizard::ClassicStyle0클래식 Windows 스타일
QWizard::ModernStyle1모던 Windows 디자인
QWizard::MacStyle2macOS 스타일
QWizard::AeroStyle3Windows Aero 스타일

setWizardStyle(), WizardOption 및 Wizard Look and Feel도 참조하십시오 .

속성 설명서

currentId : int

이 속성은 현재 페이지의 ID를 저장합니다.

기본적으로 이 속성의 값은 -1이며, 이는 현재 표시된 페이지가 없음을 나타냅니다.

액세스 함수:

int currentId() const
void setCurrentId(int id)

알림 신호:

void currentIdChanged(int id)

currentPage()도 참조하십시오 .

options : WizardOptions

이 속성은 마법사의 모양과 느낌에 영향을 미치는 다양한 옵션을 포함합니다.

기본적으로 다음 옵션이 설정되어 있습니다(플랫폼에 따라 다름):

액세스 함수:

QWizard::WizardOptions options() const
void setOptions(QWizard::WizardOptions options)

wizardStyle도 참조하십시오 .

startId : int

이 속성은 첫 번째 페이지의 ID를 저장합니다.

이 속성이 명시적으로 설정되지 않은 경우, 이 속성은 이 마법사에서 가장 낮은 페이지 ID를 기본값으로 사용하며, 아직 페이지가 삽입되지 않은 경우에는 -1을 기본값으로 사용합니다.

액세스 함수:

int startId() const
void setStartId(int id)

restart() 및 nextId()도 참조하십시오 .

subTitleFormat : Qt::TextFormat

이 속성은 페이지 부제목에 사용되는 텍스트 형식을 지정합니다.

기본 형식은 Qt::AutoText 입니다.

액세스 함수:

Qt::TextFormat subTitleFormat() const
void setSubTitleFormat(Qt::TextFormat format)

QWizardPage::title 및 titleFormat도 참조하십시오 .

titleFormat : Qt::TextFormat

이 속성은 페이지 제목에 사용되는 텍스트 형식을 지정합니다.

기본 형식은 Qt::AutoText 입니다.

액세스 함수:

Qt::TextFormat titleFormat() const
void setTitleFormat(Qt::TextFormat format)

QWizardPage::title 및 subTitleFormat도 참조하십시오 .

wizardStyle : WizardStyle

이 속성은 마법사의 모양과 느낌을 결정합니다.

기본적으로, 알파 합성이 활성화된 Windows Vista 시스템에서 ` QWizard `는 현재 위젯 스타일에 관계없이 ` AeroStyle `를 사용합니다. 이 경우를 제외하고, 기본 마법사 스타일은 현재 위젯 스타일에 따라 다음과 같이 달라집니다. 현재 위젯 스타일이 QMacStyle인 경우 MacStyle 가 기본값이고, 현재 위젯 스타일이 QWindowsStyle인 경우 ModernStyle 가 기본값이며, 그 외의 모든 경우에는 ClassicStyle 가 기본값입니다.

액세스 함수:

QWizard::WizardStyle wizardStyle() const
void setWizardStyle(QWizard::WizardStyle style)

Wizard Look and Feel 및 options도 참조하십시오 .

멤버 함수 문서

[explicit] QWizard::QWizard(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

지정된 parent 및 window flags 를 사용하여 마법사를 생성합니다.

parent() 및 windowFlags()도 참조하십시오 .

[virtual noexcept] QWizard::~QWizard()

마법사와 그 페이지들을 삭제하고, 할당된 리소스를 모두 해제합니다.

int QWizard::addPage(QWizardPage *page)

지정된 ‘ page ’를 마법사에 추가하고, 해당 페이지의 ID를 반환합니다.

이 ID는 지금까지 QWizard 에 있는 다른 어떤 ID보다 반드시 더 큰 값이 됩니다.

setPage(), page(), pageAdded()도 참조하십시오 .

[slot] void QWizard::back()

이전 페이지로 돌아갑니다.

이는 ' Back ' 버튼을 누르는 것과 동일합니다.

next(), accept(), reject(), restart()도 참조하십시오 .

QAbstractButton *QWizard::button(QWizard::WizardButton which) const

which 역할에 해당하는 버튼을 반환합니다.

setButton() 및 setButtonText()도 참조하십시오 .

QString QWizard::buttonText(QWizard::WizardButton which) const

which 버튼에 표시된 텍스트를 반환합니다.

setButtonText()를 사용하여 텍스트가 설정된 경우, 이 텍스트가 반환됩니다.

기본적으로 버튼의 텍스트는 wizardStyle 에 따라 달라집니다. 예를 들어, macOS에서는 Next 버튼이 Continue 로 표시됩니다.

button(), setButton(), setButtonText(), QWizardPage::buttonText() 및 QWizardPage::setButtonText()도 참조하십시오 .

[virtual protected] void QWizard::cleanupPage(int id)

이 가상 함수는 사용자가 Back 을 클릭하여 페이지를 떠나기 직전에 QWizard 이 페이지 id 을 정리하기 위해 호출합니다( QWizard::IndependentPages 옵션이 설정되어 있지 않은 경우).

기본 구현은 page(id)에서 QWizardPage::cleanupPage()를 호출합니다.

QWizardPage::cleanupPage() 및 initializePage()도 참조하십시오 .

[signal] void QWizard::currentIdChanged(int id)

이 신호는 현재 페이지가 변경될 때, 새로운 현재 페이지 id 와 함께 발생합니다.

참고: 속성 currentId 에 대한알림 신호입니다.

currentId() 및 currentPage()도 참조하십시오 .

QWizardPage *QWizard::currentPage() const

현재 페이지에 대한 포인터를 반환하거나, 현재 페이지가 없는 경우(예: 마법사가 표시되기 전) nullptr 을 반환합니다.

이는 page(currentId())를 호출하는 것과 동일합니다.

page(), currentId(), restart()도 참조하십시오 .

[signal] void QWizard::customButtonClicked(int which)

이 신호는 사용자가 사용자 정의 버튼을 클릭할 때 발생합니다. ` which `은 ` CustomButton1`, ` CustomButton2` 또는 ` CustomButton3`일 수 있습니다.

기본적으로 사용자 정의 버튼은 표시되지 않습니다. 사용자 정의 버튼을 표시하려면 HaveCustomButton1, HaveCustomButton2 또는 HaveCustomButton3 을 인수로 전달하여 setOption()을 호출하고, setButtonText() 또는 setButton()을 사용하여 해당 버튼을 구성하십시오.

helpRequested()도 참조하십시오 .

[override virtual protected] void QWizard::done(int result)

QDialog::done(int r)을 재구현합니다.

[override virtual protected] bool QWizard::event(QEvent *event)

QWidget::event(QEvent *event)를 재구현합니다.

QVariant QWizard::field(const QString &name) const

name 라는 필드의 값을 반환합니다.

이 함수는 마법사의 모든 페이지에서 필드에 접근하는 데 사용할 수 있습니다.

QWizardPage::registerField(), QWizardPage::field() 및 setField()도 참조하십시오 .

bool QWizard::hasVisitedPage(int id) const

페이지 기록에 id 페이지가 포함되어 있으면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

Back 를 누르면 현재 페이지가 다시 "미방문" 상태로 표시됩니다.

visitedIds()도 참조하십시오 .

[signal] void QWizard::helpRequested()

이 신호는 사용자가 ‘ Help ’ 버튼을 클릭할 때 전송됩니다.

기본적으로 ‘ Help ’ 버튼은 표시되지 않습니다. 이 버튼을 표시하려면 setOption(HaveHelpButton, true)를 호출하십시오.

예시:

LicenseWizard::LicenseWizard(QWidget *parent)
    : QWizard(parent)
{
    ...
    setOption(HaveHelpButton, true);
    connect(this, &QWizard::helpRequested, this, &LicenseWizard::showHelp);
    ...
}

void LicenseWizard::showHelp()
{
    static QString lastHelpMessage;

    QString message;

    switch (currentId()) {
    case Page_Intro:
        message = tr("The decision you make here will affect which page you "
                     "get to see next.");
        break;
    ...
    default:
        message = tr("This help is likely not to be of any help.");
    }

    QMessageBox::information(this, tr("License Wizard Help"), message);

}

customButtonClicked()도 참조하십시오 .

[virtual protected] void QWizard::initializePage(int id)

이 가상 함수는 ` QWizard `에 의해 호출되며, ` QWizard::restart()`가 호출되거나 사용자가 ` Next`를 클릭하여 페이지가 표시되기 직전에 ` id ` 페이지를 준비합니다. (단, ` QWizard::IndependentPages ` 옵션이 설정된 경우, 이 함수는 페이지가 처음 표시될 때만 호출됩니다.)

이 함수를 재구현하면 이전 페이지의 필드를 기반으로 해당 페이지의 필드가 올바르게 초기화되도록 할 수 있습니다.

기본 구현에서는 page(id)에서 QWizardPage::initializePage()을 호출합니다.

QWizardPage::initializePage() 및 cleanupPage()도 참조하십시오 .

[override virtual protected] bool QWizard::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)

QWidget::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)를 재구현합니다.

[slot] void QWizard::next()

다음 페이지로 넘어갑니다.

이는 Next 또는 Commit 버튼을 누르는 것과 동일합니다.

nextId(), back(), accept(), reject(), restart()도 참조하십시오 .

[virtual] int QWizard::nextId() const

이 가상 함수는 사용자가 ‘ Next ’ 버튼을 클릭했을 때 표시할 페이지를 확인하기 위해 ` QWizard `에 의해 호출됩니다.

반환 값은 다음 페이지의 ID이며, 다음 페이지가 없는 경우에는 -1을 반환합니다.

기본 구현은 currentPage()에서 QWizardPage::nextId()를 호출합니다.

이 함수를 재구현하면 동적인 페이지 순서를 지정할 수 있습니다.

QWizardPage::nextId() 및 currentPage()도 참조하십시오 .

QWizardPage *QWizard::page(int id) const

지정된 id 에 해당하는 페이지를 반환하며, 해당 페이지가 없는 경우 nullptr 를 반환합니다.

addPage() 및 setPage()도 참조하십시오 .

[signal] void QWizard::pageAdded(int id)

이 신호는 마법사에 페이지가 추가될 때마다 발생합니다. 해당 페이지의 id 가 매개변수로 전달됩니다.

addPage(), setPage(), startId()도 참조하십시오 .

QList<int> QWizard::pageIds() const

페이지 ID 목록을 반환합니다.

[signal] void QWizard::pageRemoved(int id)

이 신호는 마법사에서 페이지가 제거될 때마다 발생합니다. 해당 페이지의 id 가 매개변수로 전달됩니다.

removePage() 및 startId()도 참조하십시오 .

[override virtual protected] void QWizard::paintEvent(QPaintEvent *event)

QWidget::paintEvent(QPaintEvent *event)를 재구현합니다.

QPixmap QWizard::pixmap(QWizard::WizardPixmap which) const

which 역할에 설정된 픽스맵을 반환합니다.

기본적으로 macOS에서는 BackgroundPixmap 만 설정되어 있습니다.

setPixmap(), QWizardPage::pixmap() 및 Elements of a Wizard Page도 참조하십시오 .

void QWizard::removePage(int id)

지정된 ` id` 값을 가진 페이지를 제거합니다. 필요한 경우 ` cleanupPage()`가 호출됩니다.

참고: 페이지를제거하면 startId 속성의 값에 영향을 미칠 수 있습니다.

addPage(), setPage(), pageRemoved(), startId()도 참조하십시오 .

[override virtual protected] void QWizard::resizeEvent(QResizeEvent *event)

QDialog::resizeEvent(QResizeEvent *)를 재구현합니다.

[slot] void QWizard::restart()

마법사를 시작 페이지에서 다시 시작합니다. 이 함수는 마법사가 표시될 때 자동으로 호출됩니다.

startId()도 참조하십시오 .

void QWizard::setButton(QWizard::WizardButton which, QAbstractButton *button)

which 역할에 해당하는 버튼을 button 로 설정합니다.

마법사에 추가 버튼(예: Print 버튼)을 추가하려면, setButton()을 호출하여 CustomButton1 를 CustomButton3 로 설정하고, HaveCustomButton1 를 HaveCustomButton3 옵션으로 지정하여 버튼을 표시하는 방법이 있습니다.

button(), setButtonText(), setButtonLayout() 및 options도 참조하십시오 .

void QWizard::setButtonLayout(const QList<QWizard::WizardButton> &layout)

버튼이 표시되는 순서를 ` layout`으로 설정합니다. 여기서 ` layout `은 ` WizardButton` 객체들의 목록입니다.

기본 레이아웃은 설정된 옵션(예: HelpButtonOnRight)에 따라 달라집니다. options 가 제공하는 것보다 버튼 레이아웃에 대한 더 세밀한 제어가 필요한 경우 이 함수를 호출할 수 있습니다.

Stretch 을 사용하여 레이아웃에서 가로 확장 비율을 지정할 수 있습니다.

예:

MyWizard::MyWizard(QWidget *parent)
    : QWizard(parent)
{
    //...
    QList<QWizard::WizardButton> layout;
    layout << QWizard::Stretch << QWizard::BackButton << QWizard::CancelButton
           << QWizard::NextButton << QWizard::FinishButton;
    setButtonLayout(layout);
    //...
}

setButton(), setButtonText(), setOptions()도 참조하십시오 .

void QWizard::setButtonText(QWizard::WizardButton which, const QString &text)

which 버튼의 텍스트를 text 로 설정합니다.

기본적으로 버튼의 텍스트는 wizardStyle 에 따라 달라집니다. 예를 들어, macOS에서는 Next 버튼이 Continue 로 표시됩니다.

마법사에 추가 버튼(예: Print 버튼)을 추가하는 한 가지 방법은 setButtonText()를 호출하여 CustomButton1, CustomButton2 또는 CustomButton3 로 텍스트를 설정하고, HaveCustomButton1, HaveCustomButton2 및/또는 HaveCustomButton3 옵션을 사용하여 버튼을 표시하는 것입니다.

QWizardPage::setButtonText()를 사용하여 페이지별로 버튼 텍스트를 설정할 수도 있습니다.

buttonText(), setButton(), button(), setButtonLayout(), setOptions(), QWizardPage::setButtonText()도 참조하십시오 .

[slot] void QWizard::setCurrentId(int id)

currentId 과 id 사이의 페이지를 방문하지 않고, currentId 을 id 으로 설정합니다.

다음과 같은 경우 페이지 변경 없이 반환됩니다.

  • 마법사에 페이지가 없는 경우
  • 현재 페이지가 유효하지 않은 경우
  • 지정된 페이지가 currentId()과 동일한 경우
  • 지정된 페이지가 범위 밖인 경우

참고: 페이지를 앞으로 건너뛰어 id 가 0인 경우, 페이지 방문 기록이 삭제됩니다.

참고: currentId 속성에 대한세터 함수입니다.

currentId()도 참조하십시오 .

void QWizard::setDefaultProperty(const char *className, const char *property, const char *changedSignal)

className 의 기본 속성을 property 로, 관련 변경 신호를 changedSignal 로 설정합니다.

기본 속성은 className (또는 그 하위 클래스 중 하나)의 인스턴스가 QWizardPage::registerField()에 전달되었을 때, 속성이 지정되지 않은 경우에 사용됩니다.

QWizard 는 가장 일반적인 Qt 위젯을 인식합니다. 이러한 위젯(또는 그 하위 클래스)의 경우, property 나 changedSignal 을 명시적으로 지정할 필요가 없습니다. 아래 표에는 이러한 위젯들이 나열되어 있습니다:

QWizardPage::registerField()도 참조하십시오 .

void QWizard::setField(const QString &name, const QVariant &value)

name 라는 필드의 값을 value 로 설정합니다.

이 함수는 마법사의 모든 페이지에서 필드를 설정하는 데 사용할 수 있습니다.

QWizardPage::registerField(), QWizardPage::setField() 및 field()도 참조하십시오 .

void QWizard::setOption(QWizard::WizardOption option, bool on = true)

on 가 true인 경우, 지정된 option 를 활성화하고, 그렇지 않은 경우 지정된 option 를 해제합니다.

options, testOption(), setWizardStyle()도 참조하십시오 .

void QWizard::setPage(int id, QWizardPage *page)

지정된 page 를 지정된 id 를 가진 마법사에 추가합니다.

참고: 페이지를추가하면 , startId 속성이 명시적으로 설정되지 않은 경우 해당 속성의 값에 영향을 줄 수 있습니다.

addPage(), page(), pageAdded()도 참조하십시오 .

void QWizard::setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap)

which 역할에 대한 픽스맵을 pixmap 로 설정합니다.

QWizard 는 페이지를 표시할 때 픽스맵을 사용합니다. 실제로 어떤 픽스맵이 사용되는지는 wizard style 에 따라 다릅니다.

QWizardPage::setPixmap()를 사용하여 특정 페이지에 대한 픽스맵을 설정할 수도 있습니다.

pixmap(), QWizardPage::setPixmap(), Elements of a Wizard Page도 참조하십시오 .

void QWizard::setSideWidget(QWidget *widget)

지정된 ‘ widget ’을 마법사의 왼쪽에 표시하도록 설정합니다. ‘ WatermarkPixmap ’(ClassicStyle 및 ModernStyle)를 사용하는 스타일의 경우, 사이드 위젯은 워터마크 위에 표시되며, 다른 스타일이나 워터마크가 지정되지 않은 경우에는 사이드 위젯이 마법사의 왼쪽에 표시됩니다.

nullptr 를 전달하면 측면 위젯이 표시되지 않습니다.

widget 가 nullptr 가 아닐 경우, 마법사는 사이드 위젯의 부모 요소를 재설정합니다.

기존의 사이드 위젯은 모두 숨겨집니다.

다른 시점에 동일한 위젯으로 setSideWidget()을 호출할 수 있습니다.

여기에서 설정된 모든 위젯은 다른 사이드 위젯(또는 nullptr)을 설정한 후 별도로 부모를 재설정하지 않는 한, 마법사가 소멸될 때 삭제됩니다.

기본적으로 사이드 위젯은 존재하지 않습니다.

sideWidget()도 참조하십시오 .

[override virtual] void QWizard::setVisible(bool visible)

QDialog::setVisible(bool visible)을 재구현합니다.

QWidget *QWizard::sideWidget() const

마법사의 왼쪽에 있는 위젯 또는 nullptr 을 반환합니다.

기본적으로 측면 위젯은 없습니다.

setSideWidget()도 참조하십시오 .

[override virtual] QSize QWizard::sizeHint() const

QDialog::sizeHint() const를 재구현합니다.

bool QWizard::testOption(QWizard::WizardOption option) const

지정된 option 가 활성화되어 있으면 true 를 반환하고, 그렇지 않으면 false를 반환합니다.

options, setOption() 및 setWizardStyle()도 참조하십시오 .

[virtual] bool QWizard::validateCurrentPage()

이 가상 함수는 사용자가 Next 또는 Finish 을 클릭하여 마지막 순간에 유효성 검사를 수행할 때 QWizard 에 의해 호출됩니다. 이 함수가 true 을 반환하면 다음 페이지가 표시되거나(또는 마법사가 종료됩니다); 그렇지 않으면 현재 페이지가 그대로 유지됩니다.

기본 구현에서는 currentPage()에서 QWizardPage::validatePage()를 호출합니다.

가능한 경우, `validateCurrentPage()`를 재구현하는 것보다 ` Next ` 또는 ` Finish ` 버튼을 비활성화하는 것(` mandatory fields `을 지정하거나 ` QWizardPage::isComplete()`를 재구현하여)이 일반적으로 더 바람직한 방식입니다.

QWizardPage::validatePage() 및 currentPage()도 참조하십시오 .

QList<int> QWizard::visitedIds() const

방문한 페이지의 ID 목록을, 페이지를 방문한 순서대로 반환합니다.

hasVisitedPage()도 참조하십시오 .

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.