QT综合大作业—— 多媒体应用程序设计

综合作业要求

功能模块

 作者资料 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->
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值