QT 事件触发总结 - 信号与槽的绑定机制

  1. 不需要使用者绑定 只需要重写QT定义事件方法
    QT 事件触发总结 - 信号
  2. 需要使用者绑定 按照调用的优先级(由小到大)
    connect
    特点:最常用,(可以建立连接,也可根据需要取消连接)
connect(sender, SIGNAL(signal), receiver, SLOT(slot));      // 建立连接
disconnect(sender, , receiver, SLOT(slot));                 // 取消连接

eventfiler
特点: 方便在多个sender间切换,有继承关系的能有效减少代码量

sender->installEventFilter(receiver);           // 注册筛选器
sender->removeEventFilter(receiver);            // 移除筛选器
bool eventFilter(QObject *obj, QEvent *event)   // 实现事件筛选器
{
    if (event->type() == QEvent::GraphicsSceneMousePress)   // 是否是鼠标按压操作
    {
        QGraphicsSceneMouseEvent *_pMoveEvent = static_cast<QGraphicsSceneMouseEvent*>(event);  // 强转为鼠标事件
        if (_pMoveEvent->button() != Qt::RightButton)       // 不是右键操作
        {
            return QWidget::eventFilter(obj, event);
        }
        if (hitTest(_pMoveEvent->scenePos().toPoint()))     // 选中元素
        {
            if (m_eDrawType < 6 || m_eDrawType == 7 || m_eDrawType == 10 || m_eDrawType == 11)  // 允许显示右键的图元
            {
                if (m_eScoreMode < 3 || m_eScoreMode == 4)                                      // 允许显示右键的模式
                {
                    // 显示右键菜单
                    QMenu *_pPopMenu = new QMenu();
                    QAction *_pCreateAct = _pPopMenu->addAction("新建");
                    connect(_pCreateAct, SIGNAL(triggered(bool)), this, SLOT(slotCreateQml()));
                    _pPopMenu->addSeparator();

                    QAction *_pEditAct = _pPopMenu->addAction("编辑");
                    connect(_pEditAct, SIGNAL(triggered(bool)), this, SLOT(slotEditSubQml()));
                    _pPopMenu->addSeparator();
                    _pEditAct->setEnabled(false);
                    // 其它操作
                    _pPopMenu->exec(_pMoveEvent->screenPos());
                    return true;
                }

            }

        }
    }
    return QWidget::eventFilter(obj, event);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值