h2. Demon tarkoitus
Demon tarkoituksena on näyttää Qt:n mahdollisuuksia visualisointiin. Demo on ohjelmoitu Qt SDK for Windows alustalla.
Vaatimukset: Analogwidgets asennettuna, [^Pics.rar]
h5. Screenshot:
!Battery.PNG|border=1!
h5. BatteryDemo.pro
{code}
QT += core gui
TARGET = BatteryDemo
TEMPLATE = app
INCLUDEPATH += C:\analogwidgets\include
LIBS += C:\analogwidgets\include\analogwidgets\libanalogwidgets.a
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
{code}
h5. mainwindow.h
{code}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QColorGroup>
#include <QPalette>
#include <QColor>
#include <QTimer>
#include <QPainter>
#include <QPixmap>
#include <QGraphicsScene>
#include <QPropertyAnimation>
#include <QThread>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QTimer *timer;
QTimer *timer2;
QTimer *timer3;
QTimer *AnimTimer;
private slots:
void CalculateAmpers();
void CalculateCharge();
void RotateGear();
void CalculateRotation();
void CalculateTemp();
void InitGV();
void Anim1();
void Anim2();
void AnimatePanel();
private:
Ui::MainWindow *ui;
float Ampers;
int Charge;
float i;
int p;
float ChargeP;
float Temp;
float BatteryMultiplier;
float AmperMultiplier;
bool Flag;
QString Text;
QGraphicsScene *S;
};
#endif // MAINWINDOW_H
{code}
h5. mainwindow.cpp
{code}
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
timer = new QTimer(this);
timer2 = new QTimer(this);
timer3 = new QTimer(this);
AnimTimer = new QTimer(this);
S = new QGraphicsScene(this);
//Alustuksia
InitGV();
Flag = false;
p=0;
i=0;
Ampers=0;
Charge=1000;
BatteryMultiplier=0.5;
AmperMultiplier=0.8;
CalculateCharge();
Temp=20;
ui->panelView->setScene(new QGraphicsScene(this));
//Labelit piiloon
ui->redArrowLabel->hide();
ui->greenArrowLabel->hide();
ui->TempMeter->setValue(Temp);
//Labeleihin kuvat
ui->BatteryLabel->setPixmap(QPixmap("Pics/batteryGreen.png"));
ui->redArrowLabel->setPixmap(QPixmap("Pics/ArrowRed.png"));
ui->greenArrowLabel->setPixmap(QPixmap("Pics/ArrowGreen.png"));
ui->PanelLabel->setPixmap(QPixmap("Pics/panel.png"));
ui->panelView->setBackgroundBrush(Qt::darkBlue);
//Yhdistetaan timerit funktioihin
connect(timer,SIGNAL(timeout()),this,SLOT(CalculateCharge()));
connect(timer,SIGNAL(timeout()),this,SLOT(CalculateAmpers()));
connect(timer3,SIGNAL(timeout()),this,SLOT(CalculateTemp()));
connect(AnimTimer,SIGNAL(timeout()),this,SLOT(Anim1()));
connect(AnimTimer,SIGNAL(timeout()),this,SLOT(Anim2()));
connect(AnimTimer,SIGNAL(timeout()),this,SLOT(AnimatePanel()));
connect(timer2,SIGNAL(timeout()),this,SLOT(RotateGear()));
//Yhdistetaan slideri rattaan animointiin
connect(ui->UsageSlider,SIGNAL(valueChanged(int)),this,SLOT(CalculateRotation()));
//Kaynnistetaan timerit
timer->start(500);
timer3->start(2000);
AnimTimer->start(1100);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::CalculateAmpers() //"Lasketaan" rattaan kayttama virta ja naytetaan se mittarissa
{
if(Charge |= 0)Ampers = ui->UsageSlider->value()*AmperMultiplier;
else Ampers = 0;
ui->AmperMeter->setValue(Ampers);
}
void MainWindow::CalculateCharge() //"Lasketaan" akun lataus, naytetaan se progressbarissa ja prosentteina
//(kuvat vaihtuu akun kohdalla latauksen mukaan, vihrea, keltainen, punainen)
{
if(ui->UsageSlider->value()>0)
{
Charge=Charge-ui->UsageSlider->value()*BatteryMultiplier;
if(Charge<0) Charge = 0;
}
else
{
Charge = Charge+10;
if(Charge>1000) Charge=1000;
}
ChargeP=(float)Charge/(float)1000*(float)100;
Text.setNum(ChargeP);
ui->BatteryBar->setValue(Charge);
ui->ChargeP->setText(Text);
if(Charge>=300) ui->BatteryLabel->setPixmap(QPixmap("Pics/batteryGreen.png"));
if(Charge<300 && Charge>=100) ui->BatteryLabel->setPixmap(QPixmap("Pics/batteryYellow.png"));
if(Charge<100) ui->BatteryLabel->setPixmap(QPixmap("Pics/batteryRed.png"));
}
void MainWindow::RotateGear() //Rotate animaation toteutus
{
if(Charge|=0)ui->graphicsView->rotate(2);
}
void MainWindow::InitGV() //Graphicsviewin initialisointi
{
S->addPixmap(QPixmap("Pics/gear.png")); //laitetan pixmap sceneen S
ui->graphicsView->setScene(S); //Asetetaan graphicsviewiin scene S (kuva rattaasta)
ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //Scrollbarit pois
ui->graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
void MainWindow::CalculateRotation() //Maaritellaan rattaan pyorimisnopeus sliderista (timerin aikajakso, joka kutsuu qgraphicsviewin rotatea)
{
int value;
if(Charge==0) value=0;
else value = ui->UsageSlider->value();
switch(value){
case 0: timer2->stop(); break;
case 1: timer2->start(200); break;
case 2: timer2->start(150); break;
case 3: timer2->start(100); break;
case 4: timer2->start(80); break;
case 5: timer2->start(60); break;
case 6: timer2->start(50); break;
case 7: timer2->start(40); break;
case 8: timer2->start(30); break;
case 9: timer2->start(20); break;
case 10: timer2->start(10); break;
}
}
void MainWindow::CalculateTemp() //"Lasketaan" akun lampotila
{
i=0.1;
if(ui->UsageSlider->value()>0) Temp= Temp + ui->UsageSlider->value()*i;
else Temp = Temp - 1*i;
if(Temp>66) Temp=66;
if(Temp<20) Temp=20;
ui->TempMeter->setValue(Temp);
}
void MainWindow::Anim1() // KS. anim2()
{
QPropertyAnimation* anim1 = new QPropertyAnimation(ui->redArrowLabel,"geometry");
anim1->setDuration(1100);
anim1->setStartValue(QRect(630,400,91,41));
anim1->setEndValue(ui->redArrowGoal->geometry());
if(ui->UsageSlider->value()>0 && Charge > 0)
{
ui->redArrowLabel->show();
anim1->start();
}
else ui->redArrowLabel->hide();
}
void MainWindow::Anim2()
{
QPropertyAnimation* anim2 = new QPropertyAnimation(ui->greenArrowLabel,"geometry"); //Luodaan animaatio, otetaan sille geometria vihreän nuolen labelista
anim2->setDuration(1100); //Maaritetan animaation kesto
anim2->setStartValue(QRect(810,110,122,144)); //Maaritellaan animaation alkuarvo (x,y,leveys,korkeus)
anim2->setEndValue(ui->greenArrowGoal->geometry()); //Maaritellaan animaation loppuarvot ( tassa tapauksessa ui:in laitettu label, jonka paikka on loppuarvo)
if(ui->UsageSlider->value()==0 && Charge<1000) //jos kayttosliderin arvo on isompi kuin 0 = ratas pyorii ja lataus on alle taydet
{
ui->greenArrowLabel->show(); //nayta nuoli
anim2->start(); //aloita animaatio
}
else ui->greenArrowLabel->hide(); //muuten nuoli piiloon
}
void MainWindow::AnimatePanel() //"animaatio", jolla aurinkopaneelin vari vaihtuu latauksessa
{
if(ui->UsageSlider->value()==0 && Charge<1000)
{
p++;
ui->panelView->setBackgroundBrush(Qt::blue);
}
if(ui->UsageSlider->value()==0 && Charge<1000 && p>1)
{
ui->panelView->setBackgroundBrush(Qt::darkBlue);
p=0;
}
if(Charge==1000) ui->panelView->setBackgroundBrush(Qt::darkBlue);
}
{code}
h5. main.cpp
{code}
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
{code}
h2.
h3.
h3.
h3. |