• 3989阅读
  • 3回复

[提问]新生成的控件如何继承事件过滤器里的功能? [复制链接]

上一主题 下一主题
离线清晨
 

只看楼主 倒序阅读 楼主  发表于: 2014-08-21
这是我写的个事件过滤器 功能是能拖动QLabel   我后来新new一个QLabel  但这个QLabel不能拖动  请问应该如何继承事件过滤器里的功能呃?
bool Dialog::eventFilter(QObject *o, QEvent *evt)
{
    QWidget *l;
    l = qobject_cast<QWidget *>(o);
    static QPoint lastPnt;
    static bool isHover = false;
    if(evt->type() == QEvent::MouseButtonPress)
    {
        QMouseEvent* e = static_cast<QMouseEvent*>(evt);
        if(l->rect().contains(e->pos()) && //如果鼠标点击
            (e->button() == Qt::LeftButton)) //如果鼠标点击的是左键
        {
            if(QString(l->metaObject()->className())=="QLabel")
            {
                sxLab();
                l->setStyleSheet("QLabel{border-width: 1px;border-style: solid;border-color: rgb(255,0,0);background:rgba(0,0,0,0%);}");
            }
            lastPnt = e->pos();
            isHover = true;
        }
    }
    else if(evt->type() == QEvent::MouseMove && isHover)
    {
        QMouseEvent* e = static_cast<QMouseEvent*>(evt);
        int dx = e->pos().x() - lastPnt.x();
        int dy=e->pos().y()-lastPnt.y();
        if(l->x()+dx<0||l->y()+dy<0||l->x()+dx>this->width()-l->width()||l->y()+dy>this->height()-l->height())
        {}
        else
        {
            l->move(l->x()+dx,l->y()+dy);
        }
    }
    else if(evt->type() == QEvent::MouseButtonRelease && isHover)
    {
        isHover = false;
    }
    return false;
}
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线清晨

只看该作者 1楼 发表于: 2014-08-21
有人吗?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线seahouse

只看该作者 2楼 发表于: 2014-08-30
应该新写一个类吧,继承QLabel,然后创建QLabel的时候,就创建新写的那个类。
离线彩阳

只看该作者 3楼 发表于: 2014-08-30
可能需要这么写:
label->installEventFilter(this);这里this指代Dialog*。
上海Qt开发联盟,热忱地欢迎你的加入!
快速回复
限100 字节
 
上一个 下一个