简介:使用了绘图事件、定时事件,有两个窗口,一个窗口用于设置时间(主窗口),一个是时钟窗口1。主窗口menu。h文件:ifndefMENUHdefineMENUHincludeQWidgetincludeQPushButtonincludeQLineEditclassmenu:publicQWidget{QOBJECTpublic:explicitmenu(QWidgetparentnullptr);public:QPushButtonbt1;显示时钟QPushButtonbt2;设置时间QLineEditls;输入秒QLineEditlm;输入分QLineEditlh;输入时signals:voiddisplay();显示信号voidsetTime(inth,intm,ints);设置时间信号public:voidsends();voidsendt();publicslots:};endifMENUHmenu。cpp文件:includemenu。hincludeQHBoxLayoutincludeQVBoxLayoutincludeQLabelmenu::menu(QWidgetparent):QWidget(parent){resize(480,480);QHBoxLayouthbnewQHBoxLayout();QVBoxLayoutvbnewQVBoxLayout();QLabell1newQLabel(:);QLabell2newQLabel(:);bt1newQPushButton(显示时钟);bt2newQPushButton(设置时间);lsnewQLineEdit(0);lmnewQLineEdit(0);lhnewQLineEdit(0);hbaddWidget(lh);hbaddWidget(l1);hbaddWidget(lm);hbaddWidget(l2);hbaddWidget(ls);hbaddWidget(bt2);vbaddLayout(hb);vbaddWidget(bt1);thissetLayout(vb);connect(bt1,QPushButton::released,this,menu::sends);显示时钟connect(bt2,QPushButton::released,this,menu::sendt);设置时间}voidmenu::sendt()设置{intslstext()。toInt();intmlmtext()。toInt();inth5lhtext()。toInt();emitsetTime(h,m,s);}voidmenu::sends()显示{emitdisplay();}2。时钟窗口widget。h文件:ifndefWIDGETHdefineWIDGETHincludemenu。hincludeQWidgetincludeQPaintEvent绘图事件includeQTimerEventnamespaceUi{classWidget;}classWidget:publicQWidget{QOBJECTpublic:ints0;秒intm0;分inth0;时QStringT;总时间QPainterpainter;menuw1;public:voidsends();显示钟表voidgett(inth1,intm1,ints1);设置时间voidtimerEvent(QTimerEventadf);定时voidpaintEvent(QPaintEventevent);绘图public:explicitWidget(QWidgetparentnullptr);Widget();private:Ui::Widgetui;};endifWIDGETHwidget。cpp文件:includewidget。hincludeuiwidget。hincludeQDebugincludeQPainterWidget::Widget(QWidgetparent):QWidget(parent),ui(newUi::Widget){uisetupUi(this);w1。show();startTimer(100);定时1秒resize(470,470);thissetMaximumSize(470,470);设置窗口大小connect(w1,menu::display,this,Widget::sends);显示钟表connect(w1,menu::setTime,this,Widget::gett);}voidWidget::sends()显示钟表{thisshow();}voidWidget::gett(inth1,intm1,ints1){ss1;mm1;hh1;}voidWidget::timerEvent(QTimerEventevent){qDebug()定时;s;if(s60)180360540{m;s0;}if(m5){h;}if(m60){m0;}if(h12){h0;}QStringSsQString::number(s);QStringSmQString::number(m);intHh5;QStringShQString::number(H);TSh:Sm:Ss;qDebug()T;}voidWidget::paintEvent(QPaintEventevent){painternewQPainter(this);画家画笔QPenpen(Qt::red,0);paintersetPen(pen);移动画家paintertranslate(thiswidth()2,thisheight()2);画钟QRectFtarget((thiswidth()2),(thisheight()2),thiswidth(),thiswidth());QRectFsource(0,0,thiswidth(),thisheight());QPixmappixmap(:newprefix1time1。png);painterdrawPixmap(target,pixmap,source);画秒针QRectFtargets(0,5,200,220);QRectFsources(0,0,thiswidth(),thisheight());QPixmappixmaps(:newprefix1times。png);painterrotate(s6180);定时旋转秒针painterdrawPixmap(targets,pixmaps,sources);画分针QRectFtargetm(5,5,200,220);QRectFsourcem(0,0,thiswidth(),thisheight());QPixmappixmapm(:newprefix1timem。png);painterrotate((s6180));移动回原位painterrotate(m6180);旋转分针painterdrawPixmap(targetm,pixmapm,sourcem);画时针QRectFtargeth(7,7,200,220);QRectFsourceh(0,0,thiswidth(),thiswidth());QPixmappixmaph(:newprefix1timeh。png);painterrotate((m6180));移动回原位painterrotate((h6)180);旋转分针painterdrawPixmap(targeth,pixmaph,sourceh);painterrotate((h6180));painterdrawText(50,0,100,50,Qt::AlignCenter,T);数字时钟painterrotate(h6180);update();}Widget::Widget(){deleteui;}3。运行效果图 点击领取Qt学习资料视频教程链接