#include "WeatherFrame.h"
WeatherFrame
::WeatherFrame(QWidget *parent
){
mEngine = new GoogleEngine();
connect(mEngine, SIGNAL(weatherReady()), this, SLOT(handleData()));
connect(mEngine, SIGNAL(weatherError()), this, SLOT(handleError()));
mEngine->location().city() = "Salzburg";
mEngine->update("Salzburg");
}
WeatherFrame::~WeatherFrame()
{
delete mEngine;
}
void WeatherFrame::handleData()
{
mCurrentLocation = mEngine->location();
mCurrentWeather = mEngine->weather();
mListForecast = mEngine->forecast();
mReady = true;
update();
}
void WeatherFrame::handleError()
{
qDebug() << "handleerror";
}
{
if (mReady) {
Q_UNUSED(event);
painter.
setRenderHints(QPainter::HighQualityAntialiasing |
QPainter::SmoothPixmapTransform);
// draw current temperature
painter.setPen(Qt::black);
painter.
setFont(QFont("Arial",
16));
painter.
drawText(QRect(5,
2,
100,
30), Qt
::AlignLeft,
"Wetter -");
// draw location's city name
painter.
setFont(QFont("Arial",
16));
painter.
drawText(QRect(100,
2,
100,
30), Qt
::AlignLeft, mCurrentLocation.
city());
// draw condition pixmap
painter.
drawPixmap(QRect(10,
55,
50,
50),mCurrentWeather.
pixmap());
painter.
setFont(QFont("Arial",
12));
painter.
drawText(QRect(20,
25,
60,
40), Qt
::AlignCenter,
"HEUTE");
painter.
setFont(QFont("Arial",
14));
painter.
drawText(QRect(20,
105,
40,
40), Qt
::AlignCenter,
QString::number(FahrenheitToGrad
(mCurrentWeather.
temperature())));
for (int i = 0; i < mListForecast.count(); i++) {
Weather weather = mListForecast.at(i);
// draw forecast day
painter.
setFont(QFont("Arial",
12));
painter.
drawText(QRect((i
+1)*100+20,
25,
40,
40), Qt
::AlignCenter, weather.
day().
toUpper());
// draw condition pixmap
painter.
drawPixmap(QRect((i
+1)*100+20,
55,
50,
50), weather.
pixmap());
// draw forecast low and high temperature
painter.
setFont(QFont("Arial",
10));
painter.
drawText(QRect((i
+1)*100+20,
95,
40,
40), Qt
::AlignCenter,
QString::number(weather.
lowTemp()));
painter.
drawText(QRect((i
+1)*100+20,
110,
40,
40), Qt
::AlignCenter,
QString::number(weather.
highTemp()));
}
mReady = false;
} else {
}
}
int WeatherFrame::FahrenheitToGrad(int f)
{
int c = (f-32) / 1.8;
return c;
}
#include "WeatherFrame.h"
WeatherFrame::WeatherFrame(QWidget *parent)
: QFrame(parent)
{
mEngine = new GoogleEngine();
connect(mEngine, SIGNAL(weatherReady()), this, SLOT(handleData()));
connect(mEngine, SIGNAL(weatherError()), this, SLOT(handleError()));
mEngine->location().city() = "Salzburg";
mEngine->update("Salzburg");
}
WeatherFrame::~WeatherFrame()
{
delete mEngine;
}
void WeatherFrame::handleData()
{
mCurrentLocation = mEngine->location();
mCurrentWeather = mEngine->weather();
mListForecast = mEngine->forecast();
mReady = true;
update();
}
void WeatherFrame::handleError()
{
qDebug() << "handleerror";
}
void WeatherFrame::paintEvent(QPaintEvent* event)
{
if (mReady) {
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHints(QPainter::HighQualityAntialiasing | QPainter::SmoothPixmapTransform);
// draw current temperature
painter.setPen(Qt::black);
painter.setFont(QFont("Arial", 16));
painter.drawText(QRect(5,2,100,30), Qt::AlignLeft, "Wetter -");
// draw location's city name
painter.setFont(QFont("Arial", 16));
painter.drawText(QRect(100,2,100,30), Qt::AlignLeft, mCurrentLocation.city());
// draw condition pixmap
painter.drawPixmap(QRect(10,55,50,50),mCurrentWeather.pixmap());
painter.setFont(QFont("Arial", 12));
painter.drawText(QRect(20,25,60,40), Qt::AlignCenter, "HEUTE");
painter.setFont(QFont("Arial", 14));
painter.drawText(QRect(20,105,40,40), Qt::AlignCenter,
QString::number(FahrenheitToGrad(mCurrentWeather.temperature())));
for (int i = 0; i < mListForecast.count(); i++) {
Weather weather = mListForecast.at(i);
// draw forecast day
painter.setFont(QFont("Arial", 12));
painter.drawText(QRect((i+1)*100+20,25,40,40), Qt::AlignCenter, weather.day().toUpper());
// draw condition pixmap
painter.drawPixmap(QRect((i+1)*100+20,55,50,50), weather.pixmap());
// draw forecast low and high temperature
painter.setFont(QFont("Arial", 10));
painter.drawText(QRect((i+1)*100+20, 95,40,40), Qt::AlignCenter, QString::number(weather.lowTemp()));
painter.drawText(QRect((i+1)*100+20, 110,40,40), Qt::AlignCenter, QString::number(weather.highTemp()));
}
mReady = false;
} else {
QWidget::paintEvent(event);
}
}
int WeatherFrame::FahrenheitToGrad(int f)
{
int c = (f-32) / 1.8;
return c;
}
To copy to clipboard, switch view to plain text mode
Bookmarks