一、介绍
当鼠标按下、松开、双击、或者按下并移动时,都会触发QMouseEvent事件,依次是:QEvent::MouseButtonPress, QEvent::MouseButtonRelease, QEvent::MouseButtonDblClick, or QEvent::MouseMove;倘若在子窗体中对以上事件调用了ignore方法,则事件会被继续传递至父窗体,直至有窗体accept或者被eventfitter过滤掉。二、场景
客户要求做一个视频监控软件,包含四个监控窗口,双击其中一个时,放大相应窗口至全屏;再次双击时,又回复至四个窗口的布局
三、实现
1.声明
继承QVideoWidget并重载其mouseDoubleClickEvent方法
class SingelScreen : public QVideoWidget
{
Q_OBJECT
public:
explicit SingelScreen(QWidget *parent = nullptr);
protected:
void mouseDoubleClickEvent(QMouseEvent *event) override;
}
2.实现
void SingelScreen::mouseDoubleClickEvent(QMouseEvent *event)
{
qDebug()<<m_id<<" is double clicked";
isMax = !isMax;
emit dobleClicked(isMax);
}
void SingelScreen::handleDoubleClick(bool e)
{
if(this == (SingelScreen*)sender() ) return;
qDebug()<<e;
if(e)
hide();
else
show();
}
3.使用
for(int i = 0 ; i < numScreens ; i++)
{
screens.append(new SingelScreen);
layMain->addWidget(screens[i], i/2, i%2);
}
for(auto i : screens)
for(auto k : screens)
connect(i,SIGNAL(dobleClicked(bool)),k,SLOT(handleDoubleClick(bool)));
四、效果