Qt 程序实现所有控件屏蔽鼠标事件

开发中需要用到屏蔽鼠标事件达到防误触功能,查资料也找不到个好方法。

this->parentWidget()->setAttribute(Qt::WA_TransparentForMouseEvents, true); // 屏蔽 鼠标事件
this->parentWidget()->setAttribute(Qt::WA_TransparentForMouseEvents, false); // 开启 鼠标事件

// 上述方法会导致程序闪退


// 下面方法也无效

this->setAttribute(Qt::WA_TransparentForMouseEvents, true);

经(不够充分的)测试,setAttribute(Qt::WA_TransparentForMouseEvents, true);的方式最能作用于ui控件

// 此方法是有用的

ui->pushButton->setAttribute(Qt::WA_TransparentForMouseEvents, true);

通过一条指令是实现不了了(我也是萌新,不愿意多找)

索性就尝试遍历widget的所有控件,然后循环屏蔽

// 遍历widget下的所有子控件


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    QObjectList list = this->children();    // 只返回this下的所有子控件,不返回子控件的子控件
    for (int i = 0; i < list.count(); i++)
    {
    	qDebug() << list.at(i)->objectName();    // 打印所有子控件的控件名
    }


}

因为this->children(); 返回的是QObject对象的list ,而setAttribute() 函数是QWidget的成员函数,

就需要获取QWidget的控件对象。

findChild模板 就可以通过获取控件名,来获取对应QWidget*的对象,这样就解决了遍历所有控件,循环来屏蔽所有控件的鼠标事件。
// 


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    

    QObjectList list = this->children();    // 只返回this下的所有子控件,不返回子控件的子控件
    for(int i = 0; i < list.count(); i++)
    {
        // 通过控件名返回对应QWidget*的对象  
        QWidget* w = findChild<QWidget *>(list.at(i)->objectName());
        w->setAttribute(Qt::WA_TransparentForMouseEvents, true);
    }


}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值