首页| 论坛| 消息
主题:QT事件触发问题
donjun发表于 2016-03-04 09:21
发现我们这个论坛好像人流量不是很大啊,除了置顶帖点击量大些外其他帖子很少有人看,发帖的也不多
我在学习到本书第7章烤箱定时器旋钮对代码有些疑问,还请熟手门指点一二。我想我的主要问题是还没有从C的面相过程过度到QT的面相对象方式上。
如果我想在定时器走到0时,想要再触发另外一件事情,也就是调用另外一个函数应该怎么做
#ifndef OVENTIMER_H#define OVENTIMER_H
#include #include
class QTimer;
class OvenTimer : public QWidget{Q_OBJECT
public:OvenTimer(QWidget *parent = 0);
void setDuration(int secs);int duration() const;void draw(QPainter *painter);
signals:void timeout(); //这个信号函数怎么只是定义了,没有看到实现过程,也不是QT函数啊。按F1没有找打呀
protected:void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *event);
private:QDateTime finishTime;QTimer *updateTimer;QTimer *finishTimer;};
#endif
#include #include
#ifndef M_PI#define M_PI 3.14159265359#endif
#include "oventimer.h"
const double DegreesPerMinute = 7.0;const double DegreesPerSecond = DegreesPerMinute / 60;const int MaxMinutes = 45;const int MaxSeconds = MaxMinutes * 60;const int UpdateInterval = 5;
OvenTimer::OvenTimer(QWidget *parent): QWidget(parent){finishTime = QDateTime::currentDateTime();
updateTimer = new QTimer(this);connect(updateTimer, SIGNAL(timeout()), this, SLOT(update()));
finishTimer = new QTimer(this);finishTimer->setSingleShot(true);connect(finishTimer, SIGNAL(timeout()), this, SIGNAL(timeout()));connect(finishTimer, SIGNAL(timeout()), updateTimer, SLOT(stop()));
QFont font;font.setPointSize(8);setFont(font);}
void OvenTimer::setDuration(int secs){secs = qBound(0, secs, MaxSeconds);//判断给定值是否在合理范围内
finishTime = QDateTime::currentDateTime().addSecs(secs);
if (secs > 0) {updateTimer->start(UpdateInterval * 1000);//设置了5秒定时finishTimer->start(secs * 1000);//设置了鼠标点击后的secs*1000的定时} else {updateTimer->stop();finishTimer->stop();}update();}
int OvenTimer::duration() const{int secs = QDateTime::currentDateTime().secsTo(finishTime);//间隔时间if (secs pos() - rect().center();//根据鼠标点点击位置获得角度double theta = std::atan2(-point.x(), -point.y()) * 180.0 / M_PI;//setDuration(duration() + int(theta / DegreesPerSecond));update();}
void OvenTimer::paintEvent(QPaintEvent * /* event */){QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);
int side = qMin(width(), height());
painter.setViewport((width() - side) / 2, (height() - side) / 2, side, side);painter.setWindow(-50, -50, 100, 100);
draw(&painter);}
void OvenTimer::draw(QPainter *painter){static const int triangle[3][2] = {{ -2, -49 }, { +2, -49 }, { 0, -47 }};QPen thickPen(palette().foreground(), 1.5);QPen thinPen(palette().foreground(), 0.5);QColor niceBlue(150, 150, 200);
painter->setPen(thinPen);painter->setBrush(palette().foreground());painter->drawPolygon(QPolygon(3, &triangle[0][0]));
QConicalGradient coneGradient(0, 0, -90.0);coneGradient.setColorAt(0.0, Qt::darkGray);coneGradient.setColorAt(0.2, niceBlue);coneGradient.setColorAt(0.5, Qt::white);coneGradient.setColorAt(1.0, Qt::darkGray);
painter->setBrush(coneGradient);painter->drawEllipse(-46, -46, 92, 92);
QRadialGradient haloGradient(0, 0, 20, 0, 0);haloGradient.setColorAt(0.0, Qt::lightGray);haloGradient.setColorAt(0.8, Qt::darkGray);haloGradient.setColorAt(0.9, Qt::white);haloGradient.setColorAt(1.0, Qt::black);
painter->setPen(Qt::NoPen);painter->setBrush(haloGradient);painter->drawEllipse(-20, -20, 40, 40);
QLinearGradient knobGradient(-7, -25, 7, -25);knobGradient.setColorAt(0.0, Qt::black);knobGradient.setColorAt(0.2, niceBlue);knobGradient.setColorAt(0.3, Qt::lightGray);knobGradient.setColorAt(0.8, Qt::white);knobGradient.setColorAt(1.0, Qt::black);
painter->rotate(duration() * DegreesPerSecond);painter->setBrush(knobGradient);painter->setPen(thinPen);painter->drawRoundRect(-7, -25, 14, 50, 49, 49);
for (int i = 0; i s
下一页 (1/3)
回帖(3):
3楼:看了想吐
2楼:重新排下版吧.
用code标签,会类似于下面这样
class MyClass
{
public:
MyC ..
1楼:代码贴上来怎么这样了啊

全部回帖(3)»
最新回帖
收藏本帖
发新帖