搜索
bottom↓
回复: 4

请教QT子窗口和父窗口的鼠标响应问题

[复制链接]

出0入55汤圆

发表于 2017-1-15 22:32:07 | 显示全部楼层 |阅读模式
父子窗口都为QWidget,也就是说父QWidget中有一个子QWidget。
现在目的是:1,当我单击子窗口时,响应子窗口的鼠标单击事件;
                        2,当我在子窗口中按下鼠标并移动时,响应父窗口的鼠标移动事件。
网上找到的参考方法:
1,在父窗口中为子窗口注册事件过滤器:installEventFilter(this);
2,重写过滤器:
bool SliderPicture::eventFilter(QObject *to, QEvent *event)
{

    if(...)
    {
        ...
        return false;
    }
    else if(...)
    {
        ...
        return true;
    }

    return QObject::eventFilter(to, event);
}

现在问题是:具体如何实现?

出25入84汤圆

发表于 2017-1-15 22:44:50 | 显示全部楼层
mark 等待做过的人回答

出0入0汤圆

发表于 2017-1-15 23:04:25 | 显示全部楼层
没做过类似的。 不过可以用这样的“笨”方法实现吧:

父窗口的类实现一个public的函数,用于接收鼠标移动信息。 子窗口创建时,传入父窗口指针。

子窗口接收到鼠标消息,判断是否符合条件,符合的话调用父窗口的函数。

出0入55汤圆

 楼主| 发表于 2017-1-15 23:16:00 | 显示全部楼层
javenreal 发表于 2017-1-15 23:04
没做过类似的。 不过可以用这样的“笨”方法实现吧:

父窗口的类实现一个public的函数,用于接收鼠标移动 ...

bool FatherWidget::eventFilter(QObject *to, QEvent *event)
{
    if(event->type() == QEvent::MouseButtonPress)
    {
        QMouseEvent *ms=static_cast<QMouseEvent*>(event);
        if(ms->button()==Qt::LeftButton)
        {
            qDebug()<<"left clicked";
            this->mouseMoveEvent(ms);
        }
        return true;
    }
    return QObject::eventFilter(to, event);
}

这个代码刚测试过,实现按下并移动可以响应父窗口的鼠标移动槽函数。子窗口自身的响应还没测试。

出0入0汤圆

发表于 2017-1-16 01:30:06 来自手机 | 显示全部楼层
重写qwidget的mouseEvent事件函数,包含QMouseEvent头文件,重写鼠标按下、释放和移动函数,声明一个信号,在鼠标移动事件函数中发射相应的信号就行了(移动坐标之类的),在父窗口中连接信号和槽,父窗口要实现一个公共槽函数响应子窗口的信号。
用事件过滤器效率比较低吧,看资料说的。
使用信号和槽才是qt的优势吧。(手机写的,表达不太好)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 13:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表