Hier vorsichtshalber die SetupWizard-Klasse:
Code: Alles auswählen
/**
* Own/local headers
*/
#include "SetupWizard.h"
/**
* Qt Headers
*/
/**
* System headers
*/
SetupWizard::SetupWizard(QWidget *parent)
: QWizard(parent)
{
setPixmap(QWizard::BackgroundPixmap, QPixmap(":/images/icons/NegisWizard.png"));
setPage(INTRO_PAGE, new IntroPage);
setPage(XML_DB_PAGE, new XMLDBPage);
setPage(DB_SETUP_PAGE, new DBSetupPage);
setPage(XML_SETUP_PAGE, new XMLSetupPage);
setPage(FINISH_PAGE, new FinishPage);
setStartId(INTRO_PAGE);
setWizardStyle(ModernStyle);
setWindowTitle(tr("NegisSetupWizard"));
show();
}
SetupWizard::~SetupWizard()
{
}
IntroPage::IntroPage(QWidget *parent)
: QWizardPage(parent)
{
cout << "Ctor intropage" << endl;
setTitle(tr("IntroPageTitle"));
m_explainLabel = new QLabel(tr("IntroPageExplainLabel"), this);
m_explainLabel->setWordWrap(true);
}
XMLDBPage::XMLDBPage(QWidget *parent)
: QWizardPage(parent)
{
cout << "Ctor XMLDBPage" << endl;
setTitle(tr("XMLDBPageTitle"));
m_explainLabel = new QLabel(tr("XMLDBPageExplainLabel"));
m_explainLabel->setWordWrap(true);
m_dbButton = new QRadioButton(tr("XMLDBPageDBButton"));
m_xmlButton = new QRadioButton(tr("XMLDBPageXMLButton"));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(m_explainLabel);
layout->addWidget(m_dbButton);
layout->addWidget(m_xmlButton);
setLayout(layout);
}
int XMLDBPage::nextId() const
{
if(m_dbButton->isChecked())
return SetupWizard::DB_SETUP_PAGE;
else
return SetupWizard::XML_SETUP_PAGE;
}
DBSetupPage::DBSetupPage(QWidget *parent)
: QWizardPage(parent)
{
cout << "Ctor DBSetupPage" << endl;
setTitle(tr("DBSetupPageTitle"));
m_explainLabel = new QLabel(tr("DBSetupExplainLabel"));
m_explainLabel->setWordWrap(true);
m_hostLabel = new QLabel(tr("DBHost"));
m_portLabel = new QLabel(tr("DBPort"));
m_userLabel = new QLabel(tr("DBUser"));
m_pwdLabel = new QLabel(tr("DBPassword"));
m_hostField = new QLineEdit;
m_hostLabel->setBuddy(m_hostField);
m_portField = new QLineEdit;
m_portLabel->setBuddy(m_portField);
m_userField = new QLineEdit;
m_userLabel->setBuddy(m_userField);
m_pwdField = new QLineEdit;
m_pwdField->setEchoMode(QLineEdit::Password);
m_pwdLabel->setBuddy(m_pwdField);
m_testButton = new QPushButton(tr("TestDBConnection"));
m_savePwdBox = new QCheckBox(tr("SaveDBPassword"));
connect(m_testButton, SIGNAL(clicked()), this,
SLOT(testConnection()));
QGridLayout *layout = new QGridLayout;
layout->addWidget(m_explainLabel, 0, 0, 1, 2);
layout->addWidget(m_hostLabel, 1, 0);
layout->addWidget(m_hostField, 1, 1);
layout->addWidget(m_portLabel, 2, 0);
layout->addWidget(m_portField, 2, 1);
layout->addWidget(m_userLabel, 3, 0);
layout->addWidget(m_userField, 3, 1);
layout->addWidget(m_pwdLabel, 4, 0);
layout->addWidget(m_pwdField, 4, 1);
layout->addWidget(m_testButton, 5, 0);
layout->addWidget(m_savePwdBox, 5, 1);
setLayout(layout);
registerField("hostField", m_hostField);
registerField("userField", m_userField);
registerField("portField", m_portField);
registerField("pwdField", m_pwdField);
registerField("savePwdBox", m_savePwdBox);
}
bool DBSetupPage::testConnection()
{
if(m_userField->text().length() == 0)
{
QMessageBox::critical(this, tr("Error"), tr("NoUsernameProvided"));
return false;
}
if(m_hostField->text().length() == 0)
{
QMessageBox::critical(this, tr("Error"), tr("NoHostProvided"));
return false;
}
if(m_pwdField->text().length() == 0)
{
QMessageBox::critical(this, tr("Error"), tr("NoPasswordProvided"));
return false;
}
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName(m_hostField->text());
db.setUserName(m_userField->text());
db.setDatabaseName("negis");
db.setPassword(m_pwdField->text());
if(m_portField->text().length()==0)
db.setPort(m_portField->text().toInt());
bool ok = db.open();
if(!ok)
{
SQLException sqle(db.lastError());
emit sqlExceptionOccurred(sqle);
return ok;
}
db.close();
return ok;
}
bool DBSetupPage::saveConnection()
{
if(m_userField->text().length() == 0)
{
QMessageBox::critical(this, tr("Error"), tr("NoUsernameProvided"));
return false;
}
if(m_hostField->text().length() == 0)
{
QMessageBox::critical(this, tr("Error"), tr("NoHostProvided"));
return false;
}
if(m_pwdField->text().length() == 0)
{
QMessageBox::critical(this, tr("Error"), tr("NoPasswordProvided"));
return false;
}
return true;
}
XMLSetupPage::XMLSetupPage(QWidget *parent)
: QWizardPage(parent)
{
cout << "Ctor XMLSetupPage" << endl;
m_explainLabel = new QLabel(tr("ExplanationXMLSetupPage"));
m_workspaceLabel = new QLabel(tr("Workspace"));
m_workspaceField = new QLineEdit;
m_browseButton = new QPushButton(tr("BrowseDir"));
connect(m_browseButton, SIGNAL(clicked()), this,
SLOT(browseWorkspaceDir()));
QGridLayout *layout = new QGridLayout;
layout->addWidget(m_explainLabel, 0, 0, 1, 2);
layout->addWidget(m_workspaceLabel, 1, 0);
layout->addWidget(m_workspaceField, 1, 1);
layout->addWidget(m_browseButton, 1, 2);
setLayout(layout);
registerField("workspaceField", m_workspaceField);
}
void XMLSetupPage::browseWorkspaceDir()
{
m_workspaceField->setText(QFileDialog::getExistingDirectory(this, tr("OpenDirectory"),
QDir::home().path(),
QFileDialog::ShowDirsOnly
| QFileDialog::DontResolveSymlinks));
}
FinishPage::FinishPage(QWidget *parent)
: QWizardPage(parent)
{
cout << "Ctor FinishPage" << endl;
m_explainLabel = new QLabel(tr("ExplanationFinishPage"));
setFinalPage(true);
//connect(wizard()->button(QWizard::FinishButton), SIGNAL(clicked()), this,
// SLOT(finishWizard()));
}
bool FinishPage::finishWizard()
{
if(this->wizard()->hasVisitedPage(SetupWizard::DB_SETUP_PAGE))
{
QString host = wizard()->field("hostField").toString();
QString user = wizard()->field("userField").toString();
QString port = wizard()->field("portField").toString();
QString pwd="";
if(wizard()->field("savePwdBox").toBool())
pwd = wizard()->field("pwdField").toString();
QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, "$HOME/.negis");
QSettings settings;
settings.beginGroup("database");
settings.setValue("host", host);
settings.setValue("user", user);
if(pwd.length() > 0)
settings.setValue("password", pwd);
if(port.length()!=0)
settings.setValue("port", port);
settings.endGroup();
}
return true;
}
Code: Alles auswählen
if(!QFile::exists("$HOME/.negis"))
{
cout << "Before SetupWizard" << endl;
SetupWizard wiz;
wiz.show();
cout << "After SetupWizard" << endl;
}
cout << "Dudldu" << endl;
Schon mal vielen Dank!