综合作业要求
功能模块
作者资料 5分;
作者照片 5分;
文字编辑(至少3功能,其中一个改变颜色)10分;
绘制图形(至少3功能,其中一个是涂鸦,可以选择颜色绘制或填充) 10分;
图像处理(至少3功能,其中一个是灰度,必须可以打开图像文件) 10分;
动画设计(位移动画、卡通动画、时钟等均可,根据难度及效果评分,播放gif文件最多算5分) 10分;
媒体播放或视频捕获(媒体播放至少包含播放、停止、暂停、全屏切换和至少一个滑杆属性(如进度、音量、亮度、色饱和度等)调节,实时视频捕获要带有拍照功能,根据功能多少、难度及效果评分)10分;
界面整体效果及程序的细节处理(美观、友好、功能得分越高)10分;
初学qt,可能做的不是很好。
皮卡丘动画效果
cartoon::cartoon(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::cartoon)
{
ui->setupUi(this);
setWindowTitle("皮卡丘卡通效果");
resize(750,480);
//id1=startTimer(400);
num=0;
}
void cartoon::timerEvent(QTimerEvent *)
{
if (num == 6)
num = 0;
else num++;
update();
}
void cartoon::paintEvent(QPaintEvent *)
{
QTime time=QTime::currentTime();
QString text=time.toString("hh:mm:ss");
ui->statusbar->showMessage(text);
QPixmap *pix=new QPixmap(size().width(),size().height());;
pix->load("../tupian/girl"+QString::number(num)+".png");
QPainter pt(this);
pt.drawPixmap(0,0,*pix);
}
cartoon::~cartoon()
{
delete ui;
}
void cartoon::on_actionbegin_triggered()//开始
{
id1=startTimer(400);
}
void cartoon::on_actionstop_triggered()
{
killTimer(id1);
}
时钟
clockwidget::clockwidget(QWidget *parent):QWidget(parent)
{
setWindowTitle("时钟");
QTimer *timer = new QTimer(this);
connect(timer,SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
resize(600, 600);
}
clockwidget::~clockwidget()
{
}
void clockwidget::paintEvent(QPaintEvent *event)
{
//QPainter可以绘制从简单的直线到像饼图和弦这样的复杂形状。它也可以绘制排列的文本和像素映射。
QPainter painter(this);
//设置背景
QPixmap map("../tupian/p.jpeg");
QRect q(0,0,500,500);
QRect q2(0,0,width(),height());
painter.drawPixmap(q2,map,q);
//由于反走样需要比较复杂的算法,在一些对图像质量要求不是很高的应用中,是不需要进行反走样的。
//为了提高效率,一般的图形绘制系统,都是默认不进行反走样的。
//QPainter::Antialiasing 告诉绘图引擎应该在可能的情况下进行边的反锯齿绘制
painter.setRenderHint(QPainter::Antialiasing, true);
//通过设置窗口或视口矩形,执行一个线性变换的坐标
//让视口和窗口保持相同的长宽比,防止变形:
int side = qMin(width(), height());
painter.setViewport((width() - side) / 2, (height() - side-10) / 2,
side, side);
//表示窗口不东,(x,y)坐标移动到(50,50)的位置
painter.setWindow(0, 0, 210, 210);/*设置(0,0)为新的坐标原点*/
draw(&painter);
}
void clockwidget::draw(QPainter *painter)
{
static const QPoint hour[3] = {
QPoint(3, 8),
QPoint(-3, 8),
QPoint(0, -40)
};
static const QPoint min[3] = {
QPoint(3, 8),
QPoint(-3, 8),
QPoint(0, -70)
};
static const QPoint sed[3] = {
QPoint(3, 8),
QPoint(-3, 8),
QPoint(0, -90)
};//秒针
QPen thickPen(palette().foreground(), 1.5);//设置刻度线为粗黑
QPen thinPen(palette().foreground(), 0.5);//设置刻度线为灰
QTime time = QTime::currentTime();
painter->translate(100,110);//重新设定坐标原点
painter->setRenderHint(QPainter::Antialiasing);//消锯齿
painter->setBrush(Qt::blue);
painter->setPen(Qt::blue);
painter->save();//保存坐标系,防止坐标系跑偏了
painter->rotate(6.0*time.second());//注意是6.0,不是6
painter->drawConvexPolygon(sed,3);//绘制秒指针
painter->restore();//复位之前的坐标系
painter->setBrush(Qt::yellow);
painter->setPen(Qt::yellow);
painter->save();
painter->rotate(6.0*(time.minute()+time.second()/60.0));
painter->drawConvexPolygon(min,4);
painter->restore();
painter->setBrush(Qt::black);
painter->