开始/暂停按钮时每个视频播放器必备的部分,BPlay1.0也需要配备一个按钮来控制媒体文件的开/关,选择自定义一个PushButton来实现这个开关的功能,首先创建一个新的类继承于QPushButton,我将它命名为Bbutton:
这个按钮首先想要具备的功能是:1、每次鼠标点击后,开关的状态需要改变,同时需要通知媒体做出相应的动作;2、媒体加载完、播放完等需要按钮改变状态时需要与其联动。
1、构造函数
按钮在BPlay1.0启动时就应该出现在主页面上,同时需要给他一个默认的状态(关):
/********************************
* Bbutton::Bbutton(QString Image1, QString Image2)
* 功能:开始/暂停自定义按钮构造
* Image1:开启
* Image2:暂停
* *****************************/
Bbutton::Bbutton(QString Image1, QString Image2)
{
BbuttonImage1 = Image1;
BbuttonImage2 = Image2;
QPixmap Pix;
bool ret = Pix.load(Image2); /* 默认暂停 */
if (!ret) {
BLOG( "Load Image1 fail");
return;
}
this->setFixedSize(Pix.width(), Pix.height()); /* 将按钮的大小设定成图片的大小 */
this->setStyleSheet("QPushButton{border:0px;}"); /* 设置不规则图片样式: 边界0像素 */
this->setIcon(Pix); /* 设置图标 */
this->setIconSize(QSize(Pix.width(), Pix.height()));
}
主页面初始化构造时创建一个按钮:
/********************************
* MainWindow::MainWindow(QWidget *parent)
* 功能:主窗口构造函数
* *****************************/
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
/* 开始/停止播放按钮 */
OnOffBbutton = new Bbutton(":/Image/on.png", ":/Image/off.png");
OnOffBbutton->setParent(this);
OnOffBbutton->move(50, 530);
}
2、鼠标释放事件回调
接着为这个类添加鼠标事件回调处理函数以及状态保存变量,此时类成员如下:
class Bbutton : public QPushButton
{
public:
Bbutton(QString Image1, QString Image2);
private:
QString BbuttonImage1; /* 开启位图 */
QString BbuttonImage2; /* 关闭位图 */
bool Status = false; /* 初始化为暂停状态 */
void mouseReleaseEvent(QMouseEvent *e); /* 鼠标释放事件 */
};
鼠标事件回调:
/********************************
* void Bbutton::mouseReleaseEvent(QMouseEvent *e)
* 功能:鼠标释放事件回调
* *****************************/
void Bbutton::mouseReleaseEvent(QMouseEvent *e)
{
BLOG("Bbutton::mouseReleaseEvent");
QPixmap Pix;
QString Image;
Status = !Status;
Image = Status ? BbuttonImage1 : BbuttonImage2;
bool ret = Pix.load(Image);
if (!ret) {
BLOG( "Load Image1 fail");
return;
}
this->setIcon(Pix); /* 设置图标 */
return;
}
这段代码比较好理解,每次点击按钮后,按钮状态会翻转,同时更新位图,效果如下:
还有一件事就是按钮需要被实际媒体状态联动,但是目前媒体播放功能还未开发,这步修改将会在后面系列给出!