日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2024/1/18 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,不是6painter->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->setPen(Qt::black);painter->save();painter->rotate(30.0*(time.hour()+time.minute()/60.0));painter->drawConvexPolygon(hour,4);painter->restore();/*畫刻度還有數字*/for (int i = 1; i <=60; ++i) {painter->save();painter->rotate(6*i);//坐標軸旋轉6度if (i % 5 == 0) {painter->setPen(thickPen);painter->drawLine(0, -98, 0, -82);painter->drawText(-20, -82, 40, 40,Qt::AlignHCenter | Qt::AlignTop,QString::number(i/5));} else {painter->setPen(thinPen);painter->drawLine(0, -98, 0, -88);}painter->restore();} }

繪制圖形

void DrawWidget::mouseMoveEvent(QMouseEvent *e) {if(flag==0){QPainter *painter = new QPainter; //新建一個QPainter對象QPen pen; //新建一個QPen對象pen.setStyle((Qt::PenStyle)style); //(a)pen.setWidth(weight); //設置畫筆的線寬值pen.setColor(color); //設置畫筆的顏色painter->begin(pix); //(b)painter->setPen(pen); //將QPen對象應用到繪制對象中//繪制從startPos到鼠標當前位置的直線painter->drawLine(startPos,e->pos());painter->end();startPos =e->pos(); //更新鼠標的當前位置,為下次繪制做準備update(); //重繪繪制區窗體} } void DrawWidget::paintEvent(QPaintEvent *) {QPainter painter(this);painter.drawPixmap(QPoint(0,0),*pix); } void DrawWidget::resizeEvent(QResizeEvent *event) {if(height()>pix->height()||width()>pix->width()) //(a){QPixmap *newPix = new QPixmap(size()); //創建一個新的QPixmap對象newPix->fill(Qt::white); //填充新QPixmap對象newPix的顏色為白色背景色QPainter p(newPix);p.drawPixmap(QPoint(0,0),*pix); //在newPix中繪制原pix中的內容pix = newPix; //將newPix賦值給pix作為新的繪制圖形接收對象}QWidget::resizeEvent(event); //完成其余的工作 } void DrawWidget::clear() {QPixmap *clearPix =new QPixmap(size());clearPix->fill(Qt::white);pix = clearPix;update(); } void DrawWidget::mouseReleaseEvent(QMouseEvent *e) {if(flag==1){QPainter *painter=new QPainter;QPen pen;pen.setStyle((Qt::PenStyle)style);pen.setWidth(weight);pen.setColor(color);painter->begin(pix);painter->setPen(pen);endPos=e->pos();update();painter->drawRect(QRect(startPos,endPos));painter->end();startPos=e->pos();update();}if(flag==2){QPainter *painter=new QPainter;QPen pen;pen.setStyle((Qt::PenStyle)style);pen.setWidth(weight);pen.setColor(color);painter->begin(pix);painter->setPen(pen);endPos=e->pos();update();QRectF rectangle(startPos,endPos);painter->drawEllipse(rectangle);painter->end();startPos=e->pos();update();}if(flag==3){QPainter *painter=new QPainter;QPen pen;pen.setStyle((Qt::PenStyle)style);pen.setWidth(weight);pen.setColor(color);painter->begin(pix);painter->setPen(pen);endPos=e->pos();update();QBrush brush(fillcolor,Qt::SolidPattern); // 畫刷painter->setBrush(brush); // 設置畫刷painter->drawRect(QRect(startPos,endPos));painter->end();startPos=e->pos();update();}if(flag==4){QPainter *painter=new QPainter;QPen pen;pen.setStyle((Qt::PenStyle)style);pen.setWidth(weight);pen.setColor(color);painter->begin(pix);painter->setPen(pen);endPos=e->pos();update();QBrush brush(fillcolor,Qt::SolidPattern);painter->setBrush(brush); // 設置畫刷QRectF rectangle(startPos,endPos);painter->drawEllipse(rectangle);painter->end();startPos=e->pos();update();} }

圖像處理

picture::picture(QWidget *parent) :QMainWindow(parent),ui(new Ui::picture) {ui->setupUi(this);setWindowTitle("圖像處理"); }picture::~picture() {delete ui; }void picture::ShowImg(QString filename) {//教材案例CH604的目標是顯示圖片P.184,而我們不僅要顯示還要處理//簡單一點,我們就把圖片放在Label中;//拖一個label到主窗口,去掉文字,選中主窗口,點上面的"柵格布局"pi=new QPixmap(filename);//這里是絕對路徑加載pi->scaled(picture::ui->label->size(), Qt::KeepAspectRatio);picture::ui->label->setScaledContents(true);picture::ui->label->setPixmap(*pi); }void picture::on_actionOpen_triggered() {QString s=QFileDialog::getOpenFileName(this,"打開文件","/"," 圖片文件(*.png);;圖片文件(*.jpg);;位圖文件(*.bmp)");ui->statusbar->showMessage(s);//為添加一個主窗口添加一個成員函數ShowImg(QString filename)處理圖像的顯示;FileName=s;//把打開的文件名保留在一個全局變量中,以備使用ShowImg(s);//顯示圖像 }void picture::on_actionShow_triggered() {pi=new QPixmap(FileName);//這里是絕對路徑加載pi->scaled(picture::ui->label->size(), Qt::KeepAspectRatio);picture::ui->label->setScaledContents(true);picture::ui->label->setPixmap(*pi);}void picture::on_actionGray_triggered() {QImage image=pi->toImage();QColor oldColor;int width=image.width();int height=image.height();for(int y=0;y<height;y++){for(int x=0;x<width;x++){oldColor = QColor(image.pixel(x,y));int ave = (oldColor.red()+oldColor.green()+oldColor.blue())/3;image.setPixel(x,y,qRgb(ave,ave,ave));}}QPixmap ConvertPixmap=QPixmap::fromImage(image);ui->label->setPixmap(ConvertPixmap);/*==以下是測試用代碼=================*///MainWin::ui->label->setPixmap(QPixmap("../img/girl.bmp"));//僅做測試用//QMessageBox::about(this,"測試","灰度執行");//ui->statusbar->showMessage("灰度"); } void picture::on_verticalSlider_valueChanged(int value) {QImage image=pi->toImage();unsigned char *pData=image.bits();int width=image.width();int height=image.height();for(int i=0;i<height;i++){for(int j=0;j<width;j++){ //*(pData+(i*width+j)*4)就是B*(pData+(i*width+j)*4)=(*(pData+(i*width+j)*4)*value/100); //B//*(pData+(i*width+j)*4)就是G*(pData+(i*width+j)*4+1)=(*(pData+(i*width+j)*4+1)*value/100);//G//*(pData+(i*width+j)*4)就是R*(pData+(i*width+j)*4+2)=(*(pData+(i*width+j)*4+2)*value/100);//R/*===以下代表圖像置黑*(pData+(i*width+j)*4)=0; //B*(pData+(i*width+j)*4+1)=0; //G*(pData+(i*width+j)*4+2)=0; //R=================*/}}QPixmap ConvertPixmap=QPixmap::fromImage(image);ui->label->setPixmap(ConvertPixmap); } void picture::on_actionWarm_triggered() {QImage img=pi->toImage();int width=img.width();int height=img.height();QColor oldColor;int r,g,b;for(int x=0; x<width; x++){for(int y=0; y<height; y++){oldColor = QColor(img.pixel(x,y));r = oldColor.red() + 30;g = oldColor.green() + 30;b = oldColor.blue();//we check if the new values are between 0 and 255r = qBound(0, r, 255);g = qBound(0, g, 255);img.setPixel(x,y, qRgb(r,g,b));}}QPixmap ConvertPixmap=QPixmap::fromImage(img);ui->label->setPixmap(ConvertPixmap); }void picture::on_actionCold_triggered() {QImage img=pi->toImage();int width=img.width();int height=img.height();QColor oldColor;int r,g,b;for(int x=0; x<width; x++){for(int y=0; y<height; y++){oldColor = QColor(img.pixel(x,y));r = oldColor.red() ;g = oldColor.green();b = oldColor.blue()+30;//we check if the new values are between 0 and 255r = qBound(0, r, 255);g = qBound(0, g, 255);img.setPixel(x,y, qRgb(r,g,b));}}QPixmap ConvertPixmap=QPixmap::fromImage(img);ui->label->setPixmap(ConvertPixmap); }

文字編輯

ImgProcessor::ImgProcessor(QWidget *parent): QMainWindow(parent) {setWindowTitle(tr("文字編輯")); //設置窗體標題showWidget =new ShowWidget(this); //(a)resize(1000, 600);setCentralWidget(showWidget);//在工具欄上嵌入控件//設置字體fontLabel1 =new QLabel(tr("字體:"));fontComboBox =new QFontComboBox;fontComboBox->setFontFilters(QFontComboBox::ScalableFonts);fontLabel2 =new QLabel(tr("字號:"));sizeComboBox =new QComboBox;QFontDatabase db;foreach(int size,db.standardSizes())sizeComboBox->addItem(QString::number(size));boldBtn =new QToolButton;boldBtn->setIcon(QIcon(":/tupian/bold.png"));boldBtn->setCheckable(true);italicBtn =new QToolButton;italicBtn->setIcon(QIcon(":/tupian/italic.png"));italicBtn->setCheckable(true);underlineBtn =new QToolButton;underlineBtn->setIcon(QIcon(":/tupian/underline.png"));underlineBtn->setCheckable(true);colorBtn =new QToolButton;colorBtn->setIcon(QIcon(":/tupian/color.png"));colorBtn->setCheckable(true);/* 創建工具欄的函數 */createToolBars();connect(fontComboBox,SIGNAL(activated(QString)),this,SLOT(ShowFontComboBox(QString)));connect(sizeComboBox,SIGNAL(activated(QString)),this,SLOT(ShowSizeSpinBox(QString)));connect(boldBtn,SIGNAL(clicked()),this,SLOT(ShowBoldBtn()));connect(italicBtn,SIGNAL(clicked()),this,SLOT(ShowItalicBtn()));connect(underlineBtn,SIGNAL(clicked()),this,SLOT(ShowUnderlineBtn()));connect(colorBtn,SIGNAL(clicked()),this,SLOT(ShowColorBtn()));}void ImgProcessor::createToolBars() {//字體工具條fontToolBar =addToolBar("Font");fontToolBar->addWidget(fontLabel1);fontToolBar->addWidget(fontComboBox);fontToolBar->addWidget(fontLabel2);fontToolBar->addWidget(sizeComboBox);fontToolBar->addSeparator();fontToolBar->addWidget(boldBtn);fontToolBar->addWidget(italicBtn);fontToolBar->addWidget(underlineBtn);fontToolBar->addSeparator();fontToolBar->addWidget(colorBtn);}void ImgProcessor::ShowFontComboBox(QString comboStr) //設置字體 {QTextCharFormat fmt; //創建一個QTextCharFormat對象fmt.setFontFamily(comboStr); //選擇的字體名稱設置給QTextCharFormat對象mergeFormat(fmt); //將新的格式應用到光標選區內的字符 }void ImgProcessor::mergeFormat(QTextCharFormat format) {QTextCursor cursor =showWidget->text->textCursor();//獲得編輯框中的光標if(!cursor.hasSelection()) //(a)cursor.select(QTextCursor::WordUnderCursor);cursor.mergeCharFormat(format); //(b)showWidget->text->mergeCurrentCharFormat(format); //(c) }void ImgProcessor::ShowSizeSpinBox(QString spinValue) //設置字號 {QTextCharFormat fmt;fmt.setFontPointSize(spinValue.toFloat());showWidget->text->mergeCurrentCharFormat(fmt); }void ImgProcessor::ShowBoldBtn() //設置文字顯示加粗 {QTextCharFormat fmt;fmt.setFontWeight(boldBtn->isChecked()?QFont::Bold:QFont::Normal);showWidget->text->mergeCurrentCharFormat(fmt); }void ImgProcessor::ShowItalicBtn() //設置文字顯示斜體 {QTextCharFormat fmt;fmt.setFontItalic(italicBtn->isChecked());showWidget->text->mergeCurrentCharFormat(fmt); }void ImgProcessor::ShowUnderlineBtn() //設置文字加下畫線 {QTextCharFormat fmt;fmt.setFontUnderline(underlineBtn->isChecked());showWidget->text->mergeCurrentCharFormat(fmt); }void ImgProcessor::ShowColorBtn() //設置文字顏色 {QColor color=QColorDialog::getColor(Qt::red,this); //(a)if(color.isValid()){QTextCharFormat fmt;fmt.setForeground(color);showWidget->text->mergeCurrentCharFormat(fmt);} }void ImgProcessor::ShowCurrentFormatChanged(const QTextCharFormat &fmt) {fontComboBox->setCurrentIndex(fontComboBox->findText(fmt.fontFamily()));sizeComboBox->setCurrentIndex(sizeComboBox->findText(QString::number(fmt.fontPointSize())));boldBtn->setChecked(fmt.font().bold());italicBtn->setChecked(fmt.fontItalic());underlineBtn->setChecked(fmt.fontUnderline()); }ImgProcessor::~ImgProcessor() {}

媒體播放器

Video::Video(QWidget *parent) :QWidget(parent),ui(new Ui::Video) {ui->setupUi(this);setWindowTitle("簡易媒體播放器");player = new QMediaPlayer(this);videoWidget = new QVideoWidget(this);videoWidget->setGeometry(100,40,500,400);//videoWidget->resize(500, 400);// 這里可以修改增大播放窗口(1024, 768)player->setVideoOutput(videoWidget);connect(player,SIGNAL(positionChanged(qint64)),this, SLOT(onPositionChanged(qint64)));connect(player,SIGNAL(durationChanged(qint64)),this, SLOT(onDurationChanged(qint64)));}Video::~Video() {delete ui; }void Video::on_pushButton_clicked()//打開文件 {// 開始按鈕QString filename = QFileDialog::getOpenFileName(this,"需要播放的文件","../video/luck.avi" , "video(*.mp4 *.avi)");//QString filename = QFileDialog::getOpenFileName(this,"需要播放的文件","E:\\QT66\\Video" , "video(*.mp4 *.avi)");//player->setMedia(QUrl::fromLocalFile(filename));player->setVideoOutput(videoWidget);player->setMedia(QUrl::fromLocalFile("../video/luck.avi"));player->play();}void Video::on_pushButton_3_clicked()//開始 {// player = new QMediaPlayer; // player->setVideoOutput(videoWidget); // player->setMedia(QUrl::fromLocalFile("../video/luck.avi")); // //☆Qt自帶的組件不能播放很多格式的視頻或音頻,需要安裝相關的解碼器,請大家上網查閱相關解決方案player->play();} void Video::on_pushButton_5_clicked()//暫停 {player->pause(); }void Video::on_pushButton_2_clicked()//停止 {player->stop(); }void Video::on_positionSlider_valueChanged(int value) {player->setPosition(value); }void Video::onDurationChanged(qint64 duration) {//文件時長變化,更新進度顯示ui->positionSlider->setMaximum(duration);} void Video::onPositionChanged(qint64 position) {//當前文件播放位置變化,更新進度顯示if (ui->positionSlider->isSliderDown())return;ui->positionSlider->setSliderPosition(position);//}void Video::on_pushButton_4_clicked() {videoWidget->setFullScreen(true);// player->showFullScreen(); } void Video::keyPressEvent1(QKeyEvent *event) {//按鍵事件,ESC退出全屏狀態if ((event->key() == Qt::Key_Escape)&&(isFullScreen())){videoWidget->setFullScreen(false);event->accept();Video::keyPressEvent1(event);} }

總結

以上是生活随笔為你收集整理的QT综合大作业—— 多媒体应用程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。