用linux来做
优化启动时间
用qt做界面(后期用android)
用带can的开发平台
1.记录一个qt的paint(zz)
暂时还没有加进去定时器。笨就一个字。以后工作绝对不搞编程。
暂时还没有加进去定时器。笨就一个字。以后工作绝对不搞编程。
analogclock.h
#ifndef ANALOGCLOCK_H
#define ANALOGCLOCK_H
#include <QWidget>
class AnalogClock : public QWidget
{
Q_OBJECT
public:
AnalogClock(QWidget *parent = 0);
public slots:
void setValue(int);
void init(void);
protected:
void paintEvent(QPaintEvent *event);
int mValue;
};
#endif
analogclock.cpp
#include <QtGui>
#include "analogclock.h"
AnalogClock::AnalogClock(QWidget *parent)
: QWidget(parent)
{
setWindowTitle(tr("Analog Clock")); //设置标题
setFixedSize(QSize(500,500)); //固定大小
}
void AnalogClock::init() //初始化指针
{
setValue(0);
}
void AnalogClock::paintEvent(QPaintEvent *)
{
//设置指针的关键点
static const QPoint hourHand[8] =
{
QPoint(4, -20),
QPoint(4, -60),
QPoint(1, -70),
QPoint(1, -80),
QPoint(-1, -80),
QPoint(-1, -70),
QPoint(-4, -60),
QPoint(-4,-20)
};
// 设置颜色
QColor pointer(200,0,0);
QColor hourColor(255, 255, 255);
QColor minuteColor(255,122,29);
QColor textColor(255, 255, 255);
int side = qMin(width(), height()); //取最小值
QPainter painter(this);
painter.fillRect(rect(), QBrush(Qt::black)); //设置背景颜色
painter.translate(width() / 2, height() / 2); //将二分之一宽和高设为原点
painter.scale(side / 300.0, side / 300.0); //伸缩图片大小
//设置指针笔形与填充颜色
painter.setPen(Qt::NoPen);
painter.setBrush(pointer);
//设置时刻度
painter.save();
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(hourColor);
for (int i = 0; i < 9; ++i)
{
painter.drawLine(-53, 73, -62, 85);
painter.rotate(36.0);
}
painter.restore();
//设置分刻度
painter.save();
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(minuteColor);
for (int j = 0; j < 8; ++j)
{
painter.drawLine(-73, 53, -85, 62);
painter.rotate(36.0);
}
painter.restore();
//设置刻度值
painter.setPen(textColor);
painter.drawText(-61, 57,30, 30,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(0));//从(x,y)开始,高为30,宽为30
painter.drawText(-90, 15,30, 30,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(10));
painter.drawText(-90, -35,30, 30,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(20));
painter.drawText(-62, -71,30, 30,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(30));
painter.drawText(-15, -90,30, 30,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(40));
painter.drawText(32, -71,30, 30,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(50));
painter.drawText(62, -31,30, 30,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(60));
painter.drawText(60, 20,30, 30,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(70));
painter.drawText(35, 55,30, 30,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(80));
//内圆
painter.save();
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(QPen(Qt::white,2,Qt::SolidLine));
painter.setBrush(QBrush(Qt::NoBrush));
painter.drawEllipse(-20,-20,40,40);
painter.restore();
//画指针
painter.save();
painter.setPen(Qt::NoPen);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.rotate(180+36+mValue*288/80);
painter.drawConvexPolygon(hourHand, 8);
painter.restore();
//最外面圆弧
painter.save();
painter.setPen(QPen(Qt::red,3,Qt::SolidLine));
painter.setRenderHint(QPainter::Antialiasing,true);
painter.drawArc(-105,-105,210,210,-54*16,72*16);
painter.restore();
painter.save();
painter.setPen(QPen(Qt::yellow,3,Qt::SolidLine));
painter.setRenderHint(QPainter::Antialiasing,true);
painter.drawArc(-105,-105,210,210,18*16,144*16);
painter.restore();
painter.save();
painter.setPen(QPen(Qt::white,3,Qt::SolidLine));
painter.setRenderHint(QPainter::Antialiasing,true);
painter.drawArc(-105,-105,210,210,162*16,72*16);
painter.restore();
//内圆内数字
QFont font;
font.setPointSize(12);
setFont(font);
painter.drawText(-13, -11,30, 30,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(mValue));
}
void AnalogClock::setValue(int newvalue)
{
mValue= newvalue;
update();
}
mainwin.h
#ifndef MAINWIN_H
#define MAINWIN_H
#include <QSlider>
#include <QWidget>
#include "analogclock.h"
class MainWin: public QWidget
{
Q_OBJECT
public:
MainWin(QWidget *parent = 0);
protected slots:
void doValueChanged();
private:
QSlider slider;
AnalogClock clock;
};
#endif
mainwin.cpp
#include <QHBoxLayout>
#include <QTimer>
#include "mainwin.h"
MainWin::MainWin(QWidget *parent)
: QWidget(parent), slider(Qt::Vertical)
{
slider.setRange(0,80);
connect(&slider, SIGNAL(valueChanged(int)), &clock, SLOT(setValue(int)));
QHBoxLayout* layout = new QHBoxLayout(this);
layout->addWidget(&clock);
layout->addWidget(&slider);
QTimer::singleShot(0,&clock, SLOT(init())); //调用初始化函数
}
void MainWin::doValueChanged()
{
clock.setValue(slider.value());
}
main.cpp
#include <QApplication>
#include "mainwin.h"
#include "analogclock.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWin mw;
mw.show();
return app.exec();
}