ActiveX控件类继承自QaxBindable 注意点:
1、 接口函数必须为public slots,且函数返回值不能写HRESULT
2、 函数的参数或返回值都改为int,不能写为long
由于控件是个播放器,下面就一些效果实现及遇到的问题做个描述1、 播放控制条播放时隐藏,鼠标移动时显现的实现:
实现一个控件覆盖显示在另一个控件上,需要先创建底层的控件,再创建上层的控件,这样通过上层控件的show或hide能实现显示或隐藏的功能。别人说Layout添加控件的顺序也可以影响这个实现,没有论证。
设置一个定时器,当鼠标移动时,控制条显示并启动定时器,当定时器timeout()时隐藏控制条。
当鼠标移动到控制条上时,此时控制条应该不再隐藏。Qt父子窗体消息传递是当子窗体不响应其上产生的消息时,此消息会自动传递给父窗体,但此处控制条控件设置了setAttribute(Qt::WA_NoMousePropagation);即不往上传递鼠标消息,所以在主窗口中添加eventFilter来处理控制条控件的MouseMove消息。2、 双击全屏的实现:
在类中设置一个变量作为是否全屏的标记,当全屏时,还需记录当前窗体的Rect,再调用
setWindowFlags(Qt::Dialog);
showFullScreen();
实现全屏,退出全屏时,
setWindowFlags(Qt::SubWindow);
showNormal();
setFocus(); //设置键盘焦点,保证退出全屏后能立即响应键盘消息
再setGeometry(),此时Geometry设为刚才记录的Rect,即还原了窗体。3、开始里面写了些快捷键是用QshortCut来实现的,但发现在网页上时并不能响应,以为是ActiveX控件快捷键须由钩子来实现,后来试了下keyPressEvent()发现可以在网页中响应(必须在初始化窗体对象时调用setFocusPolicy函数),深层缘由有待挖掘。