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?