So..
hier erstmal das komplette Projekt als .zip Datei:
http://dl.dropbox.com/u/9260599/wfxLivery.zip
Dann habe ich 4 Dateien (pages.cpp/.h -> enthält die einzelnen QWizardPages und wfxlivery.cpp/.h -> enthält die QWizard)
wfxlivery.h
Code: Alles auswählen
#ifndef WFXLIVERY_H
#define WFXLIVERY_H
#include <QWizard>
#include <QPixmap>
#include <QDebug>
#include <QSettings>
#include <QFile>
#include <QProgressBar>
#include "pages.h"
class wfxLivery : public QWizard
{
Q_OBJECT
public:
wfxLivery(QWidget *parent = 0);
public slots:
void buttonClicked(int id);
private:
QByteArray downloadFile(const QString &url);
void act_GetLiveryInformation();
void act_selectLivery();
const char *serverUrl;
QFile f_liverys;
QSettings liverys;
QProgressBar *bar;
enum pageId {
IntroPage = 0,
FsSelection = 1,
GetLiveryInformation = 2,
LiverySelection = 3,
};
};
#endif // WFXLIVERY_H
wfxlivery.cpp
Code: Alles auswählen
#include <QtGui>
#include <QtNetwork>
#include <QTemporaryFile>
#include "wfxlivery.h"
wfxLivery::wfxLivery(QWidget *parent)
: QWizard(parent)
{
this->serverUrl = "..";
// --- Fenstertitel setzen ---
setWindowTitle(QObject::tr("Westfalia Express Livery Installer"));
// --- Bilder / Style setzen ---
setPixmap(QWizard::WatermarkPixmap, QPixmap(":/orange.png"));
setWizardStyle(QWizard::ModernStyle);
// --- Optionen setzen ---
setOption(QWizard::HaveHelpButton, false);
setOption(QWizard::HaveCustomButton1, true);
setOption(QWizard::NoBackButtonOnLastPage, true);
// --- Buttontexte setzen ---
setButtonText(QWizard::NextButton, QObject::tr("Weiter"));
setButtonText(QWizard::FinishButton, QObject::tr("Beenden"));
setButtonText(QWizard::BackButton, QObject::tr("Zurück"));
setButtonText(QWizard::CancelButton, QObject::tr("Abbrechen"));
setButtonText(QWizard::CustomButton1, QObject::tr("Webseite besuchen"));
// --- Seiten hinzufügen ---
addPage(new IntroPage);
// --- Signal/Slot Verbindungen ---
connect(this, SIGNAL(customButtonClicked(int)), this, SLOT(buttonClicked(int)));
}
void wfxLivery::buttonClicked(int id)
{
if(id == 6) {
QDesktopServices::openUrl(QUrl("http://www.westfalia-express.de"));
}
}
void wfxLivery::act_GetLiveryInformation()
{
//Datei herunterladen
QByteArray t_data;
t_data = downloadFile(QString("%1/liverys.ini").arg(this->serverUrl));
//Daten in Datei schreiben
QFile f_liverys(qApp->applicationDirPath() + "/data/liverys.ini");
if(f_liverys.open(QIODevice::ReadWrite)) {
f_liverys.write(t_data);
f_liverys.flush();
} else {
// Datei konnte nicht geöffnet werden
QMessageBox::critical(this, "Fehler",
"Die Daten konnte nicht empfangen werden, bitte führen Sie das Programm als Administrator aus!", QMessageBox::Ok);
qApp->quit();
}
f_liverys.close();
this->next();
}
//Dateidownload
QByteArray wfxLivery::downloadFile(const QString &url)
{
QNetworkAccessManager networkManager;
QNetworkReply *reply = networkManager.get(QNetworkRequest(QUrl(url)));
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QByteArray data = reply->readAll();
delete reply;
return data;
}
pages.h
Code: Alles auswählen
#ifndef PAGES_H
#define PAGES_H
#include <QWizard>
#include <QtGui>
// --- Intro Seite des Wizards ---
class IntroPage : public QWizardPage
{
Q_OBJECT
public:
IntroPage(QWidget *parent = 0);
protected:
QLabel *labelWelcome;
QLabel *labelDescription;
QLabel *labelWarning;
QVBoxLayout *layout;
};
// --- Auswahl des Flugsimulators ---
class FsSelection : public QWizardPage
{
Q_OBJECT
public:
FsSelection(QWidget *parent = 0);
protected:
QLabel *label;
QRadioButton *fs9;
QRadioButton *fsx;
QVBoxLayout *layout;
};
// --- Download der verfügbaren Liverys ---
class GetLiveryInformation : public QWizardPage
{
Q_OBJECT
public:
GetLiveryInformation(QWidget *parent = 0);
protected:
QLabel *label;
QVBoxLayout *layout;
};
// --- Auswahl einer Livery, welche heruntergeladen werden soll ---
class LiverySelection : public QWizardPage
{
Q_OBJECT
public:
LiverySelection(QWidget *parent = 0);
protected:
QLabel *label;
QListWidget *liverys;
QStringList liverysList;
QVBoxLayout *layout;
};
#endif
pages.cpp
Code: Alles auswählen
#include "pages.h"
// //
// ### Intro Seite ### //
// //
IntroPage::IntroPage(QWidget *parent)
: QWizardPage(parent)
{
setTitle(QObject::tr("Westfalia Express Livery Installer"));
QLabel *labelWelcome = new QLabel(QObject::tr("Herzlich Willkommen im Westfalia Express va Livery installer!"));
QLabel *labelDescription = new QLabel(QObject::tr("<br />Dieser Assistent wird die Westfalia Express va Liverys für Sie herunterladen und installieren.<br />"));
QLabel *labelWarning = new QLabel(QObject::tr("<b>Wichtig:</b> Eine Internetverbindung ist zwingend erforderlich, um die Liverys herunterzuladen!"));
labelWelcome->setWordWrap(true);
labelDescription->setWordWrap(true);
labelWarning->setWordWrap(true);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(labelWelcome);
layout->addWidget(labelDescription);
layout->addWidget(labelWarning);
setLayout(layout);
}
// //
// ### FS Auswahl ### //
// //
FsSelection::FsSelection(QWidget *parent)
: QWizardPage(parent)
{
setTitle(QObject::tr("Flugsimulator Wählen"));
setSubTitle(QObject::tr("Wählen Sie Ihren Flugsimulator aus"));
QLabel *label = new QLabel(QObject::tr("Bitte wählen Sie aus, für welchen Flugsimulator Sie die Liverys installieren möchten."));
label->setWordWrap(true);
// --- Formular erzeugen ---
QRadioButton *fs9 = new QRadioButton(this);
fs9->setText("Microsoft Flight Simulator 2004 / FS9");
QRadioButton *fsx = new QRadioButton(this);
fsx->setText("Microsoft Flight Simulator X / FSX");
connect(fs9, SIGNAL(clicked()), this, SLOT(enableNextButton()));
connect(fsx, SIGNAL(clicked()), this, SLOT(enableNextButton()));
// --- Layout einstellen ---
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(label);
layout->addWidget(fs9);
layout->addWidget(fsx);
setLayout(layout);
}
// //
// ### Livery Download ### //
// //
GetLiveryInformation::GetLiveryInformation(QWidget *parent)
: QWizardPage(parent)
{
setTitle(QObject::tr("Download..."));
setSubTitle(QObject::tr("Bitte warten!"));
QLabel *label = new QLabel(QObject::tr("Es wird eine Liste mit verfügbaren Liverys heruntergeladen... bitte warten Sie einen Moment!"));
label->setWordWrap(true);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(label);
setLayout(layout);
}
// //
// ### Livery Auswahl ### //
// //
LiverySelection::LiverySelection(QWidget *parent)
: QWizardPage(parent)
{
setTitle(QObject::tr("Livery wählen"));
setSubTitle(QObject::tr("Livery zum herunterladen auswählen."));
QLabel *label = new QLabel(QObject::tr("Bitte wählen Sie aus der Liste der verfügbaren Liverys die von Ihnen gewünschte Livery aus, um sie herunterzuladen und zu installieren.<br /><br />"));
label->setWordWrap(true);
QListWidget *liverys = new QListWidget;
liverysList << "PMDG747-400" << "PMDG747-400F" << "IFly 737-800";
liverys->addItems(liverysList);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(label);
layout->addWidget(liverys);
setLayout(layout);
}
Ich hoffe, dass das weiterhilft..
