First, Introduction
Recent project requirements: When the interface is displayed, all static data is displayed in a dynamic refresh manner. Add a couple of timer Qtimer to the original code, and handle the Showevent and Hideevent events (the overall comparison is simpler).
Second, detailed
1, Code(1) processbardynamic.h
#ifndef processbardynamic_h #define PROCESSBARDYNAMIC_H #include <QtGui> class Processbardynamic:public Qwidget
{q_object public:processbardynamic (qwidget *parent = 0);
~processbardynamic ();
Protected:void paintevent (qpaintevent *event);
void Resizeevent (Qresizeevent * event);
void Mousepressevent (Qmouseevent *event);
void Mousemoveevent (Qmouseevent *event);
void Mousereleaseevent (Qmouseevent *event);
void Showevent (Qshowevent *event);
void Hideevent (Qhideevent *event);
Private Slots:void Slotupdatetimer ();
void Slotmoneytimer ();
Private:qpoint BeginDrag;
BOOL Bpressflag;
Qlabel *firstlabel;
Qlabel *secondlabel;
Qpushbutton *closebtn;
Qtimer *moneytimer;
Qtimer *updatetimer;
Qprogressbar *progressbar;
Qlabel *progressbarlabel;
Qpushbutton *surebtn;
int currentmoneyvalue;
int currentnumvalue;
int currentpercentvalue;
};
#endif//Processbardynamic_h
(2) Processbardynamic.cpp
#include "processbardynamic.h" #define Maxmoney 660066 #define MAXNUM #define Maxpercent::P processbardynamic Bardynamic (Qwidget *parent): Qwidget (parent, Qt::framelesswindowhint), Bpressflag (false), Currentmoneyvalue
(0), Currentnumvalue (0), Currentpercentvalue (0) {Resize (300, 150);
Setautofillbackground (FALSE);
Qpalette pal = palette ();
Pal.setcolor (Qpalette::background, Qcolor (0xff,0xff,0xff,0xff));
SetPalette (PAL);
Firstlabel = new Qlabel (this); Firstlabel->setalignment (Qt::alignleft |
Qt::alignvcenter); Firstlabel->settext (tr ("<font color= ' #666666 ' >%1</font><font color= ' #FC822B ' size=4><b
>$%2</b></font> "). Arg (TR (" Remainingmoney ")). Arg (" 0 "));
Secondlabel = new Qlabel (this); Secondlabel->setalignment (Qt::alignright |
Qt::alignvcenter); Secondlabel->settext (QString <font color= ' #666666 ' >%1</font><font color= ' #FC822B ' size=4> <b>%2≪/b></font><font color= ' #666666 ' >%3</font>). Arg (TR ("input")). Arg (0). Arg (TR ("number"));
ProgressBar = new Qprogressbar (this);
Progressbar->setrange (0, 100);
Progressbar->reset ();
Progressbar->setvalue (0);
Progressbar->settextvisible (FALSE);
Progressbar->setstylesheet ("Qprogressbar{border:none;background: #E5E5E5; border-radius:2px;}"
"Qprogressbar::chunk{background: #009DD6; border-radius:2px;}");
Progressbarlabel = new Qlabel (this);
Progressbarlabel->setstylesheet ("Color: #333333;");
Progressbarlabel->setalignment (Qt::aligncenter);
Progressbarlabel->setfont (Qfont ("Arial", Qfont::normal));
Progressbarlabel->settext (QString ("%1%"). Arg (0));
SUREBTN = new Qpushbutton (this);
Surebtn->setfont (Qfont ("Arial", Qfont::normal));
Surebtn->setstylesheet ("Qpushbutton{border:none;color: #FFFFFF; background: #009DD6; border-radius:4px;}" "Qpushbutton:hover{border-color:green;background: #00ACF0;}");
Surebtn->setfocuspolicy (Qt::nofocus);
Surebtn->settext (TR ("sure"));
Moneytimer = new Qtimer (this);
Moneytimer->setinterval (1);
Connect (Moneytimer, SIGNAL (timeout ()), this, SLOT (Slotmoneytimer ()));
Updatetimer = new Qtimer (this);
Updatetimer->setinterval (20);
Connect (Updatetimer, SIGNAL (timeout ()), this, SLOT (Slotupdatetimer ()));
CLOSEBTN = new Qpushbutton (this);
Closebtn->setstylesheet ("Qpushbutton{background-image:url (:/close.png); border-style:flat;}"
"Qpushbutton:hover{background-image:url (:/close_hover.png); border-style:flat;}");
Closebtn->setfocuspolicy (Qt::nofocus);
Connect (closebtn, SIGNAL (clicked ()), this, SLOT (Close ()));
} processbardynamic::~processbardynamic () {if (updatetimer->isactive ()) {updatetimer->stop ());
} if (Moneytimer->isactive ()) {moneytimer->stop ();
} Currentmoneyvalue = 0;
Currentnumvalue = 0;
Currentpercentvalue = 0; } void Processbardynamic::slotupdatetimer () {if (Currentnumvalue <= maxnum) {Secondlabel->settext (QSt Ring ("<font color= ' #666666 ' >%1</font><font color= ' #FC822B ' size=4><b>%2</b></
Font><font color= ' #666666 ' >%3</font>). Arg (TR ("input")). Arg (Currentnumvalue). Arg (TR ("number"));
} if (Currentpercentvalue <= maxpercent) {progressbar->setvalue (currentpercentvalue);
Progressbarlabel->settext (QString ("%1%"). Arg (Currentpercentvalue));
} if (Currentnumvalue > Maxnum && currentpercentvalue > Maxpercent) {updatetimer->stop ();
} currentnumvalue++;
currentpercentvalue++;
} void Processbardynamic::slotmoneytimer () {if (Currentmoneyvalue <= maxmoney) {QString value = "";
int number = Currentmoneyvalue; if (number < 1000) {value =Qstring::number (number);
else if (number < 1000 * 1000) {value = Qstring::number (number/1000);
Value + = ",";
QString temp = "";
temp = Qstring::number (number%1000);
temp = temp.rightjustified (3, ' 0 ');
Temp.fill (' 0 ', 3);
Temp.push_back (Qstring::number (number));
temp = Temp.right (3);
Value + = QString ("%1"). Arg (number%1000, 3, Qchar (' 0 '));
else if (number < 1000*1000*1000) {value = Qstring::number (number/(1000*1000));
Value + = ",";
Number = number% (1000*1000);
Value + = QString ("%1"). Arg (number/1000, 3, Qchar (' 0 '));
Value + = ",";
Value + = QString ("%1"). Arg (number%1000, 3, Qchar (' 0 ')); Firstlabel->settext (tr ("<font color= ' #666666 ' >%1</font><font color= ' #FC822B ' SIZE=4><B&G T;$%2</b></font> "). Arg(TR ("Remainingmoney")). Arg (value));
} if (Currentmoneyvalue = = Maxmoney) {moneytimer->stop ();
} Currentmoneyvalue = Currentmoneyvalue + 500;
if (Currentmoneyvalue > Maxmoney) {currentmoneyvalue = Maxmoney;
} void Processbardynamic::p aintevent (qpaintevent *event) {qwidget::p aintevent (event);}
void Processbardynamic::resizeevent (Qresizeevent *event) {firstlabel->setgeometry (15, 25, 150, 30);
Secondlabel->setgeometry (165, 25, 120, 30);
Progressbar->setgeometry (15, 73, 230, 5);
Progressbarlabel->setgeometry (255, 62, 30, 25);
Surebtn->setgeometry (15, 90, 270, 45);
Closebtn->setgeometry (Width ()-15, 5, 10, 10);
Move ((qapplication::d esktop ()->width ()-width ())/2, (qapplication::d esktop ()->height ()-height ())/2);
Qwidget::resizeevent (event);
} void Processbardynamic::showevent (Qshowevent *event) {currentmoneyvalue = 0;
Currentnumvalue = 0; Currentpercentvalue = 0;
Updatetimer->start ();
Moneytimer->start ();
Qwidget::showevent (event); } void Processbardynamic::hideevent (Qhideevent *event) {if (updatetimer->isactive ()) {updatetimer->st
OP ();
} if (Moneytimer->isactive ()) {moneytimer->stop ();
} qwidget::hideevent (event);
} void Processbardynamic::mousepressevent (Qmouseevent *event) {Bpressflag = true;
BeginDrag = Event->pos ();
Qwidget::mousepressevent (event); } void Processbardynamic::mousemoveevent (Qmouseevent *event) {if (Bpressflag) {Qpoint relapos (qcursor::p OS (
)-BeginDrag);
Move (Relapos);
} qwidget::mousemoveevent (event);
} void Processbardynamic::mousereleaseevent (Qmouseevent *event) {Bpressflag = false;
Qwidget::mousereleaseevent (event);
}
(3) Main.cpp
#include "processbardynamic.h"
#include <QApplication>
int main (int argc, char *argv[])
{
Qapplication A (argc, argv);
Qtranslator Translator;
Translator.load ("Processbardynamic.qm", ":/");
A.installtranslator (&translator);
Processbardynamic W;
W.show ();
return a.exec ();
}
(4) Run (hide and display will be animated again)
Third, summary(1) The above code is not very difficult, only provide a way to display. The test code has been uploaded to csdn:http://download.csdn.net/detail/taiyang1987912/9347839.
(2) If there are suggestions, please leave a message, thank you first.