QEvent之QMouseEvent:重载mouseDoubleClickEvent实现双击窗口任意位置时放大窗口

3 篇文章 0 订阅

一、介绍

当鼠标按下、松开、双击、或者按下并移动时,都会触发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)));

四、效果

四个窗口布局
双击全屏

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值