用QT搭建简单的播放器外壳

用QT来搭建一个简易的播放器的外壳,除了一个框框用来显示视频之外,前进按钮,快退按钮,播放/暂停按钮,停止按钮,和一个选择文件的按钮。

没有什么太重点的,主要就是熟悉一下QT的基本操作,在选择文件上比较费劲因为涉及到另外的类。然后就是熟悉基本的信号与槽绑定的问题。

直接上代码

xxx.pro工程文件

  1. #-------------------------------------------------  
  2. #  
  3. # Project created by QtCreator 2011-11-10T09:15:11  
  4. #  
  5. #-------------------------------------------------  
  6.   
  7. QT       += core gui  
  8.   
  9. TARGET = XPlayer  
  10. TEMPLATE = app  
  11.   
  12.   
  13. SOURCES += main.cpp\  
  14.         mainwindow.cpp  
  15.   
  16. HEADERS  += mainwindow.h  
  17.   
  18. FORMS    += \  
  19.     mywindow.ui  


mainwindow.h

  1. #ifndef MAINWINDOW_H  
  2. #define MAINWINDOW_H  
  3.   
  4. #include <QMainWindow>  
  5. #include <QFileDialog>  
  6. #include <QMessageBox>  
  7.   
  8. #define FILE_NAME_LENGTH    128  
  9.   
  10. namespace Ui {  
  11.     class MyWindow;  
  12. }  
  13.   
  14. class MyWindow : public QMainWindow  
  15. {  
  16.     Q_OBJECT  
  17.   
  18. public:  
  19.     explicit MyWindow(QWidget *parent = 0);  
  20.     ~MyWindow();  
  21.     /* 获取当前播放还是暂停的状态 */  
  22.     int  getPlayState(void);  
  23.     /* 设置当前播放还是暂停的状态 */  
  24.     void setPlayState(int i);  
  25.   
  26. private:  
  27.     Ui::MyWindow *ui;  
  28.     /* 表示当前是播放还是暂停的状态的变量 */  
  29.     int  iPlayPause;  
  30.     /* 表示要播放的文件名称 */  
  31.     char caFileName[FILE_NAME_LENGTH];  
  32.   
  33.     /* 保存打开的文件名称(包括路径) */  
  34.     void SaveFileName(QString file);  
  35.     /* 获取文件名称(包括路径) */  
  36.     char *GetFileName(void);  
  37.   
  38. public slots:  
  39.     /* 快退 */  
  40.     void SlotsBackward(void);  
  41.     /* 快进 */  
  42.     void SlotsForward(void);  
  43.     /* 播放暂停 */  
  44.     void SlotsPlayPause(void);  
  45.     /* 停止 */  
  46.     void SlotsStop(void);  
  47.     /* 打开文件选择对话框 */  
  48.     void SlotsOpenFile(void);  
  49. };  
  50.   
  51. #endif // MAINWINDOW_H  


mainwindow.cpp

  1. #include "mainwindow.h"  
  2. #include "ui_mywindow.h"  
  3.   
  4. MyWindow::MyWindow(QWidget *parent) :  
  5.     QMainWindow(parent),  
  6.     ui(new Ui::MyWindow)  
  7. {  
  8.     ui->setupUi(this);  
  9.     iPlayPause = 0;  
  10.     connect(ui->Backward,   SIGNAL(clicked()), this, SLOT(SlotsBackward()));  
  11.     connect(ui->Forward,    SIGNAL(clicked()), this, SLOT(SlotsForward()));  
  12.     connect(ui->PlayPause,  SIGNAL(clicked()), this, SLOT(SlotsPlayPause()));  
  13.     connect(ui->Stop,       SIGNAL(clicked()), this, SLOT(SlotsStop()));  
  14.     connect(ui->OpenFile,   SIGNAL(clicked()), this, SLOT(SlotsOpenFile()));  
  15. }  
  16.   
  17. MyWindow::~MyWindow()  
  18. {  
  19.     delete ui;  
  20. }  
  21.   
  22. /* 快退 */  
  23. void MyWindow::SlotsBackward(void)  
  24. {  
  25.     qDebug("Backward");  
  26. }  
  27.   
  28. /* 快进 */  
  29. void MyWindow::SlotsForward(void)  
  30. {  
  31.     qDebug("Forward");  
  32. }  
  33.   
  34.   
  35. /* 第一次点下去从播放变为暂停,以后每次布尔状态切换播放和暂停状态 */  
  36. void MyWindow::SlotsPlayPause(void)  
  37. {  
  38.     if (getPlayState()==0) {  
  39.         qDebug("Play: %s", GetFileName());  
  40.         setPlayState(1);  
  41.     } else {  
  42.         qDebug("Pause");  
  43.         setPlayState(0);  
  44.     }  
  45. }  
  46.   
  47. /* 停止当前的播放 */  
  48. void MyWindow::SlotsStop(void)  
  49. {  
  50.     qDebug("Stop");  
  51. }  
  52.   
  53. /* 获取当前的播放状态,播放还是暂停 */  
  54. int MyWindow::getPlayState(void)  
  55. {  
  56.     return iPlayPause;  
  57. }  
  58.   
  59. /* 设置当前的播放状态,播放还是暂停 */  
  60. void MyWindow::setPlayState(int i)  
  61. {  
  62.     iPlayPause = i;  
  63. }  
  64.   
  65. /* 与OPEN按钮关联的动作,显示文件选择对话框,让用户选择想要打开的文件 */  
  66. void MyWindow::SlotsOpenFile(void)  
  67. {  
  68.     qDebug("Open File");  
  69.     QFileDialog *fd = new QFileDialog(this);  
  70.     fd->setModal(QFileDialog::ExistingFile);    /* 设置模式为存在的文件 */  
  71.     fd->setViewMode(QFileDialog::Detail);       /* 设置显示模式为详细 */  
  72.     fd->setNameFilter("Video (*.mpeg *.avi)");      /* 设置过滤器,显示特定后缀名的文件 */  
  73.     if (fd->exec() == QDialog::Accepted) {  
  74.         QString file = fd->selectedFiles()[0];  /* 取得选择的文件,包括了绝对路径 */  
  75.         //qDebug(file.toAscii().data());  
  76.         SaveFileName(file);  
  77.     }  
  78. }  
  79.   
  80. /* 将想要打开的媒体文件的名字保存到一个数组里面,方便使用 */  
  81. void MyWindow::SaveFileName(QString file)  
  82. {  
  83.     memset(caFileName, 0, FILE_NAME_LENGTH);  
  84.     strcpy(caFileName, file.toLatin1().data());  
  85. }  
  86.   
  87. /* 获取想要打开的媒体文件的名字 */  
  88. char* MyWindow::GetFileName(void)  
  89. {  
  90.     return caFileName;  
  91. }  


main.cpp

  1. #include <QtGui/QApplication>  
  2. #include "mainwindow.h"  
  3.   
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.     MyWindow w;  
  8.     w.show();  
  9.   
  10.     return a.exec();  
  11. }  

最后是ui文件,只能传个xml上来了~~

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <ui version="4.0">  
    3.  <class>MyWindow</class>  
    4.  <widget class="QMainWindow" name="MyWindow">  
    5.   <property name="geometry">  
    6.    <rect>  
    7.     <x>0</x>  
    8.     <y>0</y>  
    9.     <width>400</width>  
    10.     <height>450</height>  
    11.    </rect>  
    12.   </property>  
    13.   <property name="windowTitle">  
    14.    <string>MainWindow</string>  
    15.   </property>  
    16.   <widget class="QWidget" name="MyScreen">  
    17.    <widget class="QPushButton" name="Backward">  
    18.     <property name="geometry">  
    19.      <rect>  
    20.       <x>10</x>  
    21.       <y>400</y>  
    22.       <width>50</width>  
    23.       <height>50</height>  
    24.      </rect>  
    25.     </property>  
    26.     <property name="text">  
    27.      <string><<</string>  
    28.     </property>  
    29.    </widget>  
    30.    <widget class="Line" name="SepLine">  
    31.     <property name="geometry">  
    32.      <rect>  
    33.       <x>0</x>  
    34.       <y>400</y>  
    35.       <width>400</width>  
    36.       <height>1</height>  
    37.      </rect>  
    38.     </property>  
    39.     <property name="orientation">  
    40.      <enum>Qt::Horizontal</enum>  
    41.     </property>  
    42.    </widget>  
    43.    <widget class="QPushButton" name="PlayPause">  
    44.     <property name="geometry">  
    45.      <rect>  
    46.       <x>80</x>  
    47.       <y>400</y>  
    48.       <width>50</width>  
    49.       <height>50</height>  
    50.      </rect>  
    51.     </property>  
    52.     <property name="text">  
    53.      <string>Play</string>  
    54.     </property>  
    55.    </widget>  
    56.    <widget class="QPushButton" name="Forward">  
    57.     <property name="geometry">  
    58.      <rect>  
    59.       <x>150</x>  
    60.       <y>400</y>  
    61.       <width>50</width>  
    62.       <height>50</height>  
    63.      </rect>  
    64.     </property>  
    65.     <property name="text">  
    66.      <string>>></string>  
    67.     </property>  
    68.    </widget>  
    69.    <widget class="QPushButton" name="Stop">  
    70.     <property name="geometry">  
    71.      <rect>  
    72.       <x>220</x>  
    73.       <y>400</y>  
    74.       <width>50</width>  
    75.       <height>50</height>  
    76.      </rect>  
    77.     </property>  
    78.     <property name="text">  
    79.      <string>STOP</string>  
    80.     </property>  
    81.    </widget>  
    82.    <widget class="QPushButton" name="OpenFile">  
    83.     <property name="geometry">  
    84.      <rect>  
    85.       <x>290</x>  
    86.       <y>400</y>  
    87.       <width>50</width>  
    88.       <height>50</height>  
    89.      </rect>  
    90.     </property>  
    91.     <property name="text">  
    92.      <string>OPEN</string>  
    93.     </property>  
    94.    </widget>  
    95.   </widget>  
    96.  </widget>  
    97.  <layoutdefault spacing="6" margin="11"/>  
    98.  <resources/>  
    99.  <connections/>  
    100. </ui
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值