Qt音量控制问题

一世豁然 2015-11-30 02:03:53
我想用左右键控制播放器的播放进度,上下键控制音量大小,其中主要代码如下:
void PlayControl::keyPressEvent(QKeyEvent *event)                   //此函数为键盘上/下键控制音量
{
int volume = volumeSlider->value();
if( event->key()== Qt::Key_Up)
{
if(volume<99)
{
volume++;
volumeSlider->setValue(volume);
}
else
{
volumeSlider->setValue(99);
}
}
else if(event->key()== Qt::Key_Down)
{
if(volume>0)
{
volume--;
volumeSlider->setValue(volume);
}
else
{
volumeSlider->setValue(0);
}
}
else
{
QWidget::keyPressEvent(event);
}
}


音量信号与槽:
connect(volumeSlider, SIGNAL(valueChanged(int)), this, SIGNAL(changeVolume(int)));


void MediaPlayer::keyPressEvent(QKeyEvent *event)       //此函数为键盘左右键控制播放进度
{
int schedule = slider->value();
if(event->key() == Qt::Key_Left)
{
if(schedule>0)
{
schedule--;
slider->setValue(schedule);
player->setPosition(schedule*1000);
}
else
{
slider->setValue(0);
player->setPosition(0);
}
}
else if(event->key() == Qt::Key_Right)
{
if(schedule<player->duration() /1000)
{
schedule++;
slider->setValue(schedule);
player->setPosition(schedule*1000);
}
else
{
slider->setValue(player->duration() /1000);
player->setPosition(player->duration() /1000);
}
}
}


但是实际效果却是左右键都能控制音量。但控制播放进度只要鼠标不点击播放滑动块就有效,
点击了有什么效果也没有。
请问怎么回事?


...全文
487 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
冷静忍耐 2015-12-02
  • 打赏
  • 举报
回复
引用 6 楼 Explorer_day 的回复:
[quote=引用 3 楼 u013466477 的回复:] [quote=引用 2 楼 Explorer_day 的回复:] [quote=引用 1 楼 u013466477 的回复:] 你怎么不把它们放一起写??一个keyPressEvent不容易错,PlayControl和MediaPlayer什么关系?? 可能鼠标点击了播放滑动块,MediaPlayer失去焦点了,不响应MediaPlayer键盘事件
1、两个所在类不一样,而我又不想把头文件包含到另外一个类去来降低编译效率。 2、PlayControl类是基本的控制功能,快进,快退,暂停等。MediaPlayer是播放器各个模块(类)功能 的集合(其他还有列表类等),也就是布局,时间显示,播放显示等。 3、但是我设置焦点还是没有效果。[/quote] 这样应该不行吧,不会两个事件同时都进的吧,你可以打印一下,看进不进,进了哪一个。 你可以把keyPressEvent写主界面的类里,然后不同按键直接调用各个功能函数[/quote] 难道只要是keyPressEvent(符合的话),都会相应?[/quote] 两个子界面不会同时响应keyPressEvent,只有有焦点的界面才会 keyPressEvent只写在父窗口中就行,子界面类不写,就是你两个类的父窗口。
一世豁然 2015-12-02
  • 打赏
  • 举报
回复
引用 3 楼 u013466477 的回复:
[quote=引用 2 楼 Explorer_day 的回复:] [quote=引用 1 楼 u013466477 的回复:] 你怎么不把它们放一起写??一个keyPressEvent不容易错,PlayControl和MediaPlayer什么关系?? 可能鼠标点击了播放滑动块,MediaPlayer失去焦点了,不响应MediaPlayer键盘事件
1、两个所在类不一样,而我又不想把头文件包含到另外一个类去来降低编译效率。 2、PlayControl类是基本的控制功能,快进,快退,暂停等。MediaPlayer是播放器各个模块(类)功能 的集合(其他还有列表类等),也就是布局,时间显示,播放显示等。 3、但是我设置焦点还是没有效果。[/quote] 这样应该不行吧,不会两个事件同时都进的吧,你可以打印一下,看进不进,进了哪一个。 你可以把keyPressEvent写主界面的类里,然后不同按键直接调用各个功能函数[/quote] 难道只要是keyPressEvent(符合的话),都会相应?
一世豁然 2015-12-02
  • 打赏
  • 举报
回复
引用 4 楼 besterector 的回复:
你都没重写 mouseEvent , 怎么可能有反应
keyPressEvent跟mouseEvent有关系吗?
besterector 2015-12-01
  • 打赏
  • 举报
回复
你都没重写 mouseEvent , 怎么可能有反应
冷静忍耐 2015-11-30
  • 打赏
  • 举报
回复
引用 2 楼 Explorer_day 的回复:
[quote=引用 1 楼 u013466477 的回复:] 你怎么不把它们放一起写??一个keyPressEvent不容易错,PlayControl和MediaPlayer什么关系?? 可能鼠标点击了播放滑动块,MediaPlayer失去焦点了,不响应MediaPlayer键盘事件
1、两个所在类不一样,而我又不想把头文件包含到另外一个类去来降低编译效率。 2、PlayControl类是基本的控制功能,快进,快退,暂停等。MediaPlayer是播放器各个模块(类)功能 的集合(其他还有列表类等),也就是布局,时间显示,播放显示等。 3、但是我设置焦点还是没有效果。[/quote] 这样应该不行吧,不会两个事件同时都进的吧,你可以打印一下,看进不进,进了哪一个。 你可以把keyPressEvent写主界面的类里,然后不同按键直接调用各个功能函数
一世豁然 2015-11-30
  • 打赏
  • 举报
回复
引用 1 楼 u013466477 的回复:
你怎么不把它们放一起写??一个keyPressEvent不容易错,PlayControl和MediaPlayer什么关系?? 可能鼠标点击了播放滑动块,MediaPlayer失去焦点了,不响应MediaPlayer键盘事件
1、两个所在类不一样,而我又不想把头文件包含到另外一个类去来降低编译效率。 2、PlayControl类是基本的控制功能,快进,快退,暂停等。MediaPlayer是播放器各个模块(类)功能 的集合(其他还有列表类等),也就是布局,时间显示,播放显示等。 3、但是我设置焦点还是没有效果。
冷静忍耐 2015-11-30
  • 打赏
  • 举报
回复
你怎么不把它们放一起写??一个keyPressEvent不容易错,PlayControl和MediaPlayer什么关系?? 可能鼠标点击了播放滑动块,MediaPlayer失去焦点了,不响应MediaPlayer键盘事件

16,233

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧