[Qt] QWizard i przechodzenie między stronami

0

zacząłem pisać kreator w Qt i napotkałem na problem. Wzorowałem się na przykładzie License Wizard. Napisałem trochę kodu:
nagłówek:

#include <QWizard>
#include <QLabel>
#include <QLineEdit>
#include <QGridLayout>
#include <QMessageBox>

class NewProject : public QWizard
{
    Q_OBJECT
public:
    enum { Page_Intro, Page_ProjectName, Page_Details,
           Page_Finish };


    NewProject(QWidget *parent=0);
};

//*****************************************************************************

class IntroPage : public QWizardPage
{
    Q_OBJECT

public:
    IntroPage(QWidget *parent = 0);

    int nextId() const;

private:
    QLabel *label;
};

//*****************************************************************************

class ProjectName : public QWizardPage
{
    Q_OBJECT

public:
    ProjectName(QWidget *parent = 0);

    int nextId() const;

private:
    QLabel *label;
    QLabel *label2;
    QLineEdit *nameLineEdit;
};

kod .cpp

#include "NewProject.h"

NewProject::NewProject(QWidget *parent)
{
    if (parent != 0)
        setParent(parent);

    addPage(new IntroPage);
    addPage(new ProjectName);

    setWindowTitle(tr("New project"));

    setStartId(Page_Intro);
}

//*****************************************************************************
IntroPage::IntroPage(QWidget *parent)
    : QWizardPage(parent)
{
    setTitle(tr("Introduction"));
    label = new QLabel(tr("You are making a new project. Click Next to continue"));
    label->setWordWrap(true);

    QGridLayout *layout = new QGridLayout;
    layout->addWidget(label);
    setLayout(layout);
}

int IntroPage::nextId() const
{
    return NewProject::Page_ProjectName;
}


//*****************************************************************************
ProjectName::ProjectName(QWidget *parent)
{
    if (parent != 0)
        setParent(parent);

    setTitle(tr("Project name"));
    label = new QLabel(tr("Please enter the name of the project"));
    label2 = new QLabel(tr("Name:"));
    nameLineEdit = new QLineEdit;
    label->setBuddy(nameLineEdit);
    label->setWordWrap(true);

    QGridLayout *layout = new QGridLayout;
    layout->addWidget(label, 0, 1);
    layout->addWidget(label2, 1, 0);
    layout->addWidget(nameLineEdit, 1, 1);
    setLayout(layout);
}

int ProjectName::nextId() const
{
    if (!this->nameLineEdit->text().isEmpty())
        return NewProject::Page_Details;

    QMessageBox::warning(0, "Intro",tr("Please enter the name of the project"), QMessageBox::Ok, QMessageBox::Ok);

    return NewProject::Page_ProjectName;
}

i teraz gdy w 1 oknie kliknę na Next to wyświetla mi się komunikat "Please enter the name of the project". Ktoś wie dlaczego?

0

spradz co dokladnie robi ProjectName::nextId()

0
no_solution_found napisał(a)

i teraz gdy w 1 oknie kliknę na Next to wyświetla mi się komunikat "Please enter the name of the project". Ktoś wie dlaczego?
a możesz wyjaśnić niby czemu jest to dziwne?

IntroPage::nextId() zwraca wartość Page_ProjectName=1, a drugim dodanym widokiem jest właśnie ProjectName wyświetlający ten napis, więc nie rozumiem czemu się temu dziwisz.

0
MarekR22 napisał(a)

a możesz wyjaśnić niby czemu jest to dziwne?

IntroPage::nextId() zwraca wartość Page_ProjectName=1, a drugim dodanym widokiem jest właśnie ProjectName wyświetlający ten napis, więc nie rozumiem czemu się temu dziwisz.

dla mnie dziwne, bo się tego nie spodziewałem.

ale przynajmniej w dobra stronę idę?

1 użytkowników online, w tym zalogowanych: 0, gości: 1