




已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于QT前端的mplayer播放器項(xiàng)目文檔V1.0一、項(xiàng)目概述Mplayer。它支持大量的多媒體文件格式,像常見的音頻文件如mp3/wav/mid,常見的視頻文件如avi/vcd/dvd/rm等等,各種視頻編/解碼方式也是應(yīng)有盡有。我們項(xiàng)目的目標(biāo)是在liunx下,用QT做一個(gè)MPlayer皮膚,能夠?qū)崿F(xiàn)播放器的常見功能,如:播放、停止、快進(jìn)、快退、上/下一曲等。并把程序移植到ARM平臺(tái)上。二、功能體驗(yàn)本節(jié)主要目的是讓大家在學(xué)習(xí)具體實(shí)現(xiàn)過程前,先體驗(yàn)下播放器的功能。1、PC端功能體驗(yàn)將“項(xiàng)目代碼工程代碼”目錄下的mplayer.tar.gz拷貝linux系統(tǒng)中(主機(jī)環(huán)境配置好以后,參照第四節(jié)的實(shí)現(xiàn)過程)。#tar xvfz mplayer.tar.gz#./mplayer2、目標(biāo)平臺(tái)功能體驗(yàn)l 將“項(xiàng)目代碼工程鏡像”文件夾中的zImage、rootfs.cramfs燒寫到目標(biāo)板(或者采用nfs方式)。分區(qū)情況為:Boot: 0 - 40000 size=0x40000Kernel:40000 240000 size=0x200000Rootfs: 240000 -3740000 size=0x3500000啟動(dòng)參數(shù)為:setenv root=1f02 init=/linuxrc rootfstype=cramfs console=ttySAC0,115200 display=sam240setenv bootcmd setenv bootcmd nand read 30008000 40000 200000 ; go 30008000l 啟動(dòng)系統(tǒng)后運(yùn)行:#. ./Qtopia.sh#cd mymplayer#./mymplayer -qws三、實(shí)現(xiàn)原理先來考慮考慮如何為mplayer編寫前端界面的問題。有兩種思路,一種是把mplayer解剖,直接修改他里面的代碼,這樣我們做得界面就能夠和mplayer一體了(當(dāng)然也能夠通過link mplayer用到的任何的庫(kù)和.o文檔,把他無縫的集成在程式里面);第二種方法就是mplayer所謂的slave模式。mplayer /home/linux/1.mp3 -quiet -slave現(xiàn)在來探討一下slave模式:所謂的slave模式,就是mplayer在運(yùn)行過程中能夠接收用戶的輸入命令行,具體支持哪些命令行,能夠通過mplayer -input cmdlist這條命令來得到,在Mplayer源碼的slave.txt中也有對(duì)這些命令有詳細(xì)的講解。Slave模式下工作的Mplayer可以和系統(tǒng)的標(biāo)準(zhǔn)輸入、輸出進(jìn)行信息交互。我們可以用linux C編程來完成對(duì)slave模式工作的Mplayer進(jìn)行控制和信息獲取。如:mkfifo(“/tmp/fifo”,0777);可以使用popen()來打開MplayerFILE* mp;mp=popen(“mplyer /home/linux/1.mp3 -quiet slave input file=/tmp/fifo,”r”);可以通過管道/tmp/fifo給mplayer發(fā)送命令,通過mp獲取mplay的返回?cái)?shù)據(jù)如:system(“echo ”mute 0” /tmp/fifo”);/寫命令fgets(buf,1000,mp);/讀取mplay返回?cái)?shù)據(jù)而Qt給我們提供了更方便的實(shí)現(xiàn)方法。通過定義一個(gè)QProcess對(duì)象調(diào)用已編譯好的Mplayer。QProcess *process = new QProcess();process-setProcessChannelMode(QProcess:MergedChannels);Process-start(“mplayer ac mad xxxxx”);在命令中添加 -slave 和 -quiet就可以通過命令設(shè)置Mplayer實(shí)現(xiàn)相應(yīng)的功能。在mplayer源碼中的,slave.txt中對(duì)這些命令有詳細(xì)的講解。Process-start(“mplayer slave quiet ac mad xxxxx”);1、暫停功能通過如下代碼可以設(shè)置Mplayer暫停。process-write(“pause ”);執(zhí)行這段代碼的時(shí)候如果是播放狀態(tài)就會(huì)暫停,暫停狀態(tài)時(shí)就會(huì)繼續(xù)播放。2、獲取播放文件的總時(shí)間和當(dāng)前播放進(jìn)度執(zhí)行下面代碼時(shí),Mplayer將時(shí)間在標(biāo)準(zhǔn)輸出顯示。process-write(get_time_pos );process-write(get_time_length );通過如下代碼即可讀出我們需要的信息:connect(process,SIGNAL(readyReadStandardOutput(),this,SLOT(back_message_slots();process有可讀取的信息時(shí),發(fā)出信號(hào),在槽函數(shù)back_message_slots()中讀取信息。void MPlayer:back_message_slots()while(process-canReadLine()QString message(process-readLine();/message即為讀取的信息我們可以根據(jù)需要取我們要的信息如/文件總時(shí)間為:ANS_LENGTH=23.00/當(dāng)前時(shí)間為:ANS_TIME_POSITION=23.003、快進(jìn)功能seek typeSeek to some place in the movie.0 is a relative seek of +/- seconds (default).1 is a seek to % in the movie.2 is a seek to an absolute position of seconds.下面代碼即可實(shí)現(xiàn)快進(jìn)功能:process-write(“seek * 1 ”);4、音量調(diào)節(jié)volume absIncrease/decrease volume or set it to if abs is nonzero.下面代碼即可實(shí)現(xiàn)快進(jìn)功能:Process-write(“volume -1 ”); /音量減小Process-write(“volume +1 ”); /音量增加5、靜音功能mute valueToggle sound output muting or set it to value when value = 0(1 = on, 0 = off).下面代碼即可實(shí)現(xiàn)快進(jìn)功能:process-write(mute 0 ); /開啟靜音process-write(mute 1 ); /關(guān)閉靜音6、定位視頻窗口通過上面的代碼基本功能實(shí)現(xiàn)了,可是播放視頻的時(shí)候發(fā)現(xiàn)又彈出一個(gè)窗口。并沒有出現(xiàn)在我們的窗口里。如下代碼即可時(shí)間窗口的定位。QString common = mplayer -slave -quiet -ac mad -zoom movie/ + file_name + -wid + QString:number(widget-winId();process-start(common);紅色部分實(shí)現(xiàn)窗口的定位。Widget是一個(gè)QWidget對(duì)象。通過winId可以獲得一個(gè)數(shù)字,-wid既將視頻輸出定位到widget窗體部件中。注意:-wid參數(shù)只在X11、directX和OpenGL中適用。四、PC環(huán)境下的實(shí)現(xiàn)過程1、PC環(huán)境搭建主機(jī)環(huán)境:Red Hat Enterprise Linux 5.0交叉編譯工具:gcc-3.4.5-glibc-2.3.6主機(jī)編譯工具:gcc-4.1.2(1)主機(jī)端安裝mplayerl 將“項(xiàng)目代碼/mplay源碼”目錄下的MPlayer-1.0rc2.tar.bz2、libmad-0.15.1b.tar.gz(1個(gè)mp3解碼庫(kù))拷貝到linux系統(tǒng)中,如:/home/linux/mplayer目錄下l 安裝libmad-0.15.1b.tar.gz#tar xvfz libmad-0.15.1b.tar.gz#cd libmad-0.15.1b#./configure#make#mkdir /lib/lib#mkdir /lib/include#cp mad.h /lib/include#cp .libs/libmad.a /lib/libl 安裝mplayer#tar xvfj MPlayer-1.0.rc2.tar.bz2#cd MPlayer-1.0rc2#./configure -with-extraincdir=/lib/include -with-extralibdir=/lib/lib#make#make install此時(shí)可以試著播放一下mp3、avi等文件了# mplayer -ac mad 1.mp3# mplayer -ac mad 2.avi(2)安裝、移植qtopia-4.2.0注:需要先按照5.2節(jié)將tslib按照好l 將“項(xiàng)目代碼/qtopia源碼”目錄下的qtopia-opensource-src-4.2.0.tar.gz拷貝到linux系統(tǒng)中,如:/home/linux/Qtopia目錄下# tar zxvf qtopia-opensource-src-4.2.0.tar.gz# mv qtopia-opensource-4.2.0 source# mkdir target /創(chuàng)建在source同級(jí)目錄下創(chuàng)建目錄target修改源碼包# cd source# cd src/libraries/qtopiabase/# cp custom-linux-cassiopeia-g+.h custom-linux-arm-g+.h# cp custom-linux-cassiopeia-g+.cpp custom-linux-arm-g+.cpp修改時(shí)區(qū)信息# vi src/libraries/qtopia/qtimezone.cpp將114行的 /usr/share/zoneinfo/ 改為/Qtipia/zoneinfo/ ,保存退出。# vi src/settings/systemtime/settime.cpp將318行的 /usr/share/zoneinfo/ 改為/Qtipia/zoneinfo/ ,保存退出。l 裁減Qtopia core的庫(kù)(下列操作后在屏幕上會(huì)出現(xiàn)一個(gè)光標(biāo),否則沒有光標(biāo)。根據(jù)需求配置)# vi qtopiacore/qconfig-qpe.h首先注釋掉關(guān)于鼠標(biāo)光標(biāo)的宏定義,讓程序運(yùn)行時(shí),觸摸屏中央有光標(biāo)出現(xiàn):/ Qtopia Core/*#ifndef QT_NO_QWS_CURSOR# define QT_NO_QWS_CURSOR#endif*/*#ifndef QT_NO_QWS_MOUSE# define QT_NO_QWS_MOUSE#endif#ifndef QT_NO_QWS_MOUSE_AUTO# define QT_NO_QWS_MOUSE_AUTO#endif*/其它宏定義根據(jù)需要進(jìn)行注釋。保存后將qconfig-qpe.h拷貝到global目錄。# cp qtopiacore/qconfig-qpe.h qtopiacore/qt/src/corelib/global/qconfig-qpe.h (必須進(jìn)行的操作)注釋掉其他文件里的QT_NO_QWS_CURSOR的定義# vi qtopiacore/qt/src/corelib/global/qfeatures.h注釋掉如下內(nèi)容:/*#if !defined(QT_NO_QWS_CURSOR) & (defined(QT_NO_CURSOR)#define QT_NO_QWS_CURSOR#endif*/保存退出。# vi qtopiacore/qt/src/corelib/global/qglobal.h注釋掉以下內(nèi)容:/# define QT_NO_QWS_CURSOR#vim qtopiacore/qt/tools/qvfb/qvfbshmem.cpp注釋掉asm/page.h/#include #vim qtopiacore/qt/tools/qvfb/qvfbmmap.cpp注釋掉asm/page.h/#include 并修改如下內(nèi)容unsigned char *data;uint data_offset_value = sizeof(QVFbHeader);if (data_offset_value % PAGE_SIZE)data_offset_value += PAGE_SIZE - (data_offset_value % PAGE_SIZE);為:unsigned char *data;uint data_offset_value = sizeof(QVFbHeader);const int page_size = getpagesize();if (data_offset_value % page_size)data_offset_value += page_size - (data_offset_value % page_size);# vim src/libraries/qtopiabase/qmemoryfile_unix.cpp +128修改f = :open(tmpFile.toLatin1(), O_CREAT | O_WRONLY);為:f = :open(tmpFile.toLatin1(), O_CREAT | O_WRONLY ,0777);l 修改交叉工具#vim qtopiacore/qt/mkspecs/qws/linux-arm-g+/qmake.conf將文件中的arm-linux-*全部修改為arm-softfloat-linux-gnu-*這樣做的前提是我的交叉工具鏈?zhǔn)莂rm-softfloat-linux-gnu,如果你的是arm-linux就不用改了。l 生成Makefile#cd ./target /為了不破壞源碼,選擇在此目錄下配置、編譯源碼#./source/configure -release -image /Qtopia -prefix /Qtopia -xplatform linux-arm-g+ -arch arm -no-qvfb -displaysize 320x240 -no-modem -extra-qtopiacore-config -release -xplatform qws/linux-arm-g+ -embedded arm -qconfig qpe -depths 4,8,16,32 -qt-sql-sqlite -no-mouse-linuxtp -qt-mouse-tslib -I/home/linux/tslib/include -L/home/linux/tslib/lib 2./configureERR.txt注意:這里/Qtopia是最后Qtopia的安裝路徑,安裝到主機(jī)的某個(gè)路徑下,最終這個(gè)路徑和目標(biāo)板上的路徑必須一致。主要配置選項(xiàng)說明如下:-xplatform linux-arm-g+ -arch arm目標(biāo)平臺(tái)為arm-linux,體系結(jié)構(gòu)為arm。-no-qvfb目標(biāo)平臺(tái)已支持framebuffer,因而不使用虛擬幀緩沖。-extra-qtopiacore-config為Qtopia core 配置選項(xiàng)。-xplatform qws/linux-arm-g+ -embedded arm目標(biāo)平臺(tái)編譯配置文件使用qtopiacore/qt/mkspecs/qws/linux-arm-g+目錄下的配置文件,嵌入式平臺(tái)為arm。-qconfig qpe使用配置文件qconfig-qpe.h,若使用qconfig-large.h配置文件,則使用-qconfig large選項(xiàng)。-qt-sql-sqlite數(shù)據(jù)庫(kù)支持Sqlite。-qt-kbd-usb鍵盤支持usb協(xié)議。-no-mouse-linuxtp -qt-mouse-tslib-I/home/linux/tslib/include -L/home/linux/tslib/lib觸摸屏協(xié)議不支持linuxtp,支持tslib,并在后面添加上剛才編譯的tslib的頭文件和庫(kù)。2./qtopiaconfigureERR.txt最后將配置過程中的錯(cuò)誤輸出到qtopiaconfigureERR.txt文件中。l 編譯#make#make installl 將安裝和的目錄考到nfsroot目錄下#cp /Qtopia /rootfs -a(3)熟悉主機(jī)開發(fā)環(huán)境l 提供給PC端的開發(fā)工具上面的qtopia編譯安裝完成后,會(huì)在咱們前面創(chuàng)建的target目錄下生成很多開發(fā)工具。先看一下供主機(jī)端使用的工具rootlocalhost bin# pwd/home/linux/Qtopia/target/qtopiacore/host/binrootlocalhost bin# lsassistant linguist lupdate qmake rcc uicdesigner lrelease moc qvfb templates uic3如果系統(tǒng)以前有其它qt開發(fā)工具,把環(huán)境變量修改一下,保證它們不要和我們這幾個(gè)工具沖突。下面可以試一下你的designer了。#./designer2、在PC端實(shí)現(xiàn)基于qt前端的mplayer播放器創(chuàng)建工程目錄/home/linux/mplayer(1)搭建ui界面利用前面安裝的designer搭建ui界面,并將其保存至/home/linux/mplayer/mplayer.ui#./designer圓角矩形標(biāo)注: 加了一個(gè)widget,留作mplayer的播放區(qū)(2)編寫程序在/home/linux/mymplayer/下創(chuàng)建mplayer.cpp、mplayer.h、main.cpp 、image.qrcMain.cpp/*main.cpp*/#include #include mplayer.hint main(int argc, char *argv)QApplication app(argc, argv);MPlayer player; /實(shí)例最終的MPlayer類player.show(); /顯示界面return app.exec(); /運(yùn)行程序mplayer.h#ifndef _MPLAYER_H#define _MPLAYER_H#include #include #include #include #include #include #include #include ui_mplayer.hclass MPlayer:public QDialog,private Ui_DialogQ_OBJECTpublic:MPlayer(QWidget *parent = 0);public:QTime int_to_time(int);public slots: void play_pause_slots(); /暫停void stop_slots(); /停止void previous_slots(); /上一曲void next_slots(); /下一曲void seek_slots(int);void get_time_slots(); /得到播放時(shí)間void set_volume_slots(int); /設(shè)置音量void set_sound_slots(); /靜音void playerReward_slots(); /快退void playerForward_slots(); /快進(jìn)void back_message_slots(); /更新顯示信息private:QProcess *process;QStringList files;QDir directory;int file_count;QString file_name;bool isPlay;bool isSound;bool isStop;QTimer *timer;int file_length;int curr_time;#endifmplayer.cpp/*mplayer.cpp */#include mplayer.h#include #include MPlayer:MPlayer(QWidget *parent):QDialog(parent)setupUi(this); /初始化界面isPlay = true;isSound = true;isStop = false;/*為按鍵添加圖標(biāo)*/playQIcon icon_play;icon_play.addPixmap(QPixmap(QString:fromUtf8(images/pause_enabled.png), QIcon:Normal, QIcon:Off);pushButton_2-setIcon(icon_play);/stopQIcon icon_stop;icon_stop.addPixmap(QPixmap(QString:fromUtf8(images/stop_enabled.png), QIcon:Normal, QIcon:Off);pushButton_3-setIcon(icon_stop);/rewardQIcon icon_reward;icon_reward.addPixmap(QPixmap(QString:fromUtf8(images/reward_enabled.png), QIcon:Normal, QIcon:Off);pushButton_4-setIcon(icon_reward);/forwardQIcon icon_forward;icon_forward.addPixmap(QPixmap(QString:fromUtf8(images/forward_enabled.png), QIcon:Normal, QIcon:Off);pushButton_5-setIcon(icon_forward);/soundQIcon icon_sound;icon_sound.addPixmap(QPixmap(QString:fromUtf8(images/sound_enabled.png), QIcon:Normal, QIcon:Off);pushButton-setIcon(icon_sound);QIcon icon_previous;icon_previous.addPixmap(QPixmap(QString:fromUtf8(images/previous_disabled.png), QIcon:Normal, QIcon:Off);pushButton_6-setIcon(icon_previous);QIcon icon_next;icon_next.addPixmap(QPixmap(QString:fromUtf8(images/next_enabled.png), QIcon:Normal, QIcon:Off);pushButton_7-setIcon(icon_next);/*設(shè)置按鈕無邊框*/pushButton-setFlat(true);pushButton_2-setFlat(true);pushButton_3-setFlat(true);pushButton_4-setFlat(true);pushButton_5-setFlat(true);pushButton_6-setFlat(true);pushButton_7-setFlat(true);/*獲得播放列表*/directory.setPath(./movie);files = directory.entryList(QDir:AllEntries,QDir:Time);file_name = files2; /文件0和1為 ”.” ”.”,所以從文件2開始播放file_count = 2;label_3-setText(files2);/*初始化進(jìn)度條及QProcess類*/horizontalSlider-setPageStep(1);process = new QProcess(this);process-setProcessChannelMode(QProcess:MergedChannels);/*初始化信號(hào)、槽*/connect(pushButton_2,SIGNAL(clicked(),this,SLOT(play_pause_slots();connect(pushButton_3,SIGNAL(clicked(),this,SLOT(stop_slots();connect(pushButton_4,SIGNAL(clicked(),this,SLOT(playerReward_slots();connect(pushButton_5,SIGNAL(clicked(),this,SLOT(playerForward_slots();connect(pushButton_6,SIGNAL(clicked(),this,SLOT(previous_slots();connect(pushButton_7,SIGNAL(clicked(),this,SLOT(next_slots();/connect(horizontalSlider,SIGNAL(valueChanged(int),this,SLOT(seek_slots(int);connect(spinBox,SIGNAL(valueChanged(int),this,SLOT(set_volume_slots(int);connect(pushButton,SIGNAL(clicked(),this,SLOT(set_sound_slots();connect(process,SIGNAL(readyReadStandardOutput(),this,SLOT(back_message_slots();/當(dāng)process可以讀到Mplayer的返回信息時(shí),產(chǎn)生readyReadStandardOutput()信號(hào)/process-start(mplayer -slave -quiet -ac mad 2.avi);/add -wid QWidget-winId();QString common = mplayer -slave -quiet -ac mad -zoom movie/ + file_name + -wid + QString:number(widget-winId(); /這里的widget是ui中MPlayer的顯示區(qū)process-start(common); /開始運(yùn)行程序spinBox-setValue(40); timer = new QTimer(this);connect(timer,SIGNAL(timeout(),this,SLOT(get_time_slots();/定時(shí)獲取MPlayer的時(shí)間信息timer-start(1000); /啟動(dòng)定時(shí)器 1秒timeout 1次void MPlayer:play_pause_slots()if(!isPlay)if(isStop)file_name = filesfile_count;QString common = mplayer -slave -quiet -ac mad -zoom movie/ + file_name + -wid + QString:number(widget-winId();process-start(common);QIcon icon_stop;icon_stop.addPixmap(QPixmap(QString:fromUtf8(images/stop_enabled.png), QIcon:Normal, QIcon:Off);pushButton_3-setIcon(icon_stop);isStop = false;elseprocess-write(pause );QIcon icon_play;icon_play.addPixmap(QPixmap(QString:fromUtf8(images/pause_enabled.png), QIcon:Normal, QIcon:Off);pushButton_2-setIcon(icon_play);isPlay = true;elseQIcon icon_pause;icon_pause.addPixmap(QPixmap(QString:fromUtf8(images/play_enabled.png), QIcon:Normal, QIcon:Off);pushButton_2-setIcon(icon_pause);isPlay = false;process-write(pause );void MPlayer:stop_slots()if(!isStop)process-write(quit );QIcon icon_pause;icon_pause.addPixmap(QPixmap(QString:fromUtf8(images/play_enabled.png), QIcon:Normal, QIcon:Off);pushButton_2-setIcon(icon_pause);isPlay = false;QIcon icon_stop;icon_stop.addPixmap(QPixmap(QString:fromUtf8(images/stop_disabled.png), QIcon:Normal, QIcon:Off);pushButton_3-setIcon(icon_stop);isStop = true;label-setText(00:00:00);label_2-setText(00:00:00);void MPlayer:previous_slots()if(file_count 2)if(file_count = (files.size()-1)QIcon icon_next;icon_next.addPixmap(QPixmap(QString:fromUtf8(images/next_enabled.png), QIcon:Normal, QIcon:Off);pushButton_7-setIcon(icon_next);process-write(quit );process = new QProcess(this);connect(process,SIGNAL(readyReadStandardOutput(),this,SLOT(back_message_slots();file_count-;if(!isStop)file_name = filesfile_count;QString common = mplayer -slave -quiet -ac mad -zoom movie/ + file_name + -wid + QString:number(widget-winId();process-start(common);if(file_count = 2)QIcon icon_previous;icon_previous.addPixmap(QPixmap(QString:fromUtf8(images/previous_disabled.png), QIcon:Normal, QIcon:Off);pushButton_6-setIcon(icon_previous);label_3-setText(filesfile_count);void MPlayer:next_slots()if(file_count setIcon(icon_previous);process-write(quit ); process = new QProcess(this);connect(process,SIGNAL(readyReadStandardOutput(),this,SLOT(back_message_slots();file_count+;if(!isStop)file_name = filesfile_count;QString common = mplayer -slave -quiet -ac mad -zoom movie/ + file_name + -wid + QString:number(widget-winId();process-start(common);if(file_count = (files.size()-1) QIcon icon_next;icon_next.addPixmap(QPixmap(QString:fromUtf8(images/next_disabled.png), QIcon:Normal, QIcon:Off);pushButton_7-setIcon(icon_next);label_3-setText(filesfile_count);void MPlayer:seek_slots(int seek_num)qDebug()state() = QProcess:Running )process-write(QString(seek + QString:number(qMin(seek_num,100) + 1 ).toAscii();void MPlayer:get_time_slots()if(isPlay)process-write(get_time_pos );process-write(get_time_length );void MPlayer:set_volume_slots(int volume)qDebug()write(QString(volume + + QString:number(volume) + ).toAscii();/process-write(QString(volume +1 ).toAscii();void MPlayer:set_sound_slots()if(isSound)process-write(mute 1 );QIcon icon_sound;icon_sound.addPixmap(QPixmap(QString:fromUtf8(images/nosound_enabled.png), QIcon:Normal, QIcon:Off);pushButton-setIcon(icon_sound);isSound = false;elseprocess-write(mute 0 );QIcon icon_sound;icon_sound.addPixmap(QPixmap(QString:fromUtf8(images/sound_enabled.png), QIcon:Normal, QIcon:Off);pushButton-setIcon(icon_sound);isSound = true;void MPlayer:playerReward_slots()/bool ok;/int m=moviePosition.toInt(&ok);if (process & process-state()=QProcess:Running & !isPlay)/QString cmd=seek +QString:number(qMax(m-10,0)+ 1 ;/process-write(cmd.toAscii();qDebug()setVisible(false);/bool ok;/int m=moviePosition.t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 富陽(yáng)區(qū)中考二模數(shù)學(xué)試卷
- 高考海南卷數(shù)學(xué)試卷
- 2025年01月2025海南三亞市第二人民醫(yī)院第一次(考核)招聘員額制人員91人(第1號(hào))筆試歷年專業(yè)考點(diǎn)(難、易錯(cuò)點(diǎn))附帶答案詳解
- 財(cái)務(wù)團(tuán)隊(duì)培訓(xùn)課件圖片
- 菏澤市婦幼保健院招聘?jìng)浒钢乒ぷ魅藛T考試真題2024
- 高中三數(shù)學(xué)試卷
- 高考清新區(qū)一模數(shù)學(xué)試卷
- 高三12月月考數(shù)學(xué)試卷
- 電流-電壓關(guān)系考核試卷
- 高新區(qū)2024初三一診數(shù)學(xué)試卷
- 倉(cāng)儲(chǔ)物流部事故應(yīng)急預(yù)案
- 浙江省臺(tái)州市2024-2025學(xué)年高一下學(xué)期期末政治試卷
- 社區(qū)專職考試題庫(kù)及答案
- 法院法警考試試題及答案
- 2025年中國(guó)電池箔行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 應(yīng)急工器具培訓(xùn)課件
- 中國(guó)食用油市場(chǎng)調(diào)研及發(fā)展策略研究報(bào)告2025-2028版
- 2026屆江蘇省名校新高三6月適應(yīng)性調(diào)研測(cè)試語(yǔ)文試題及答案
- 2025年 浙江省考行測(cè)考試試題附答案
- JJF 2252-2025機(jī)動(dòng)車檢測(cè)用渦流式金屬探傷儀校準(zhǔn)規(guī)范
- 宣傳部密碼電報(bào)管理制度
評(píng)論
0/150
提交評(píng)論