Qt事件:changeEvent(改变事件)

改变事件changeEvent(QEvent* e)继承自QWidget

以下事件的变化会触发changeEvent:

QEvent::ToolBarChange,

工具栏的按钮被按下

QEvent::ActivationChange,活动状态变化
QEvent::EnabledChange,可用/不可用改变
QEvent::FontChange, 字体改变
QEvent::StyleChange, 风格改变
QEvent::PaletteChange,调色板改变
QEvent::WindowTitleChange,窗口标题改变
QEvent::ModifiedChange,修改状态改变
QEvent::MouseTrackingChange,鼠标跟随状态改变
QEvent::ParentChange, 父项改变
QEvent::WindowStateChange, 窗口状态改变
QEvent::LanguageChange, 语言改变
QEvent::LocaleChange, 系统区域设置改变
QEvent::LayoutDirectionChange, 布局方向改变
QEvent::ReadOnlyChange.只读状态改变

如设置字体后会触发changeEvent。

this->setFont(myAppFont);
void changeEvent(QEvent* event)
{
    if(event->type() == QEvent::FontChange)
    {
        qDebug()<<"字体改变了";
    }

    QWidget::changeEvent(event);
}
Qt中,当处理窗口消息`WM_DEVICECHANGE`时,如果设备发生改变(如USB设备插入或移除),系统会连续发送多个此类消息。为了避免接收并处理过多的重复通知,你可以使用以下策略: 1. **事件过滤器**(Event Filter):在窗体上设置一个自定义的事件过滤器,对`WM_DEVICECHANGE`消息进行检查。只在接收到的消息中设备ID发生变化时才进一步处理。 ```cpp QObject::connect(window, &QWidget::winEventFilter, this, &YourClass::filterDeviceChange); ``` 然后在过滤器函数中对比当前设备ID是否与之前不同: ```cpp bool YourClass::filterDeviceChange(QObject *obj, QEvent *event) { if (event->type() == QEvent::DeviceChange) { auto deviceChangeEvent = static_cast<QDeviceEvent*>(event); if (deviceChangeEvent->devType() != previousDeviceType) { // 新设备,处理... previousDeviceType = deviceChangeEvent->devType(); handleDeviceChange(deviceChangeEvent); } else { // 跳过已知的重复事件 return true; } } return QObject::eventFilter(obj, event); } ``` 2. **信号屏蔽**:如果你正在监听某个特定设备的连接状态变化,可以使用`QFileSystemWatcher`或`QLibraryInfo`等API来监控文件系统或库的变化,而不用直接依赖于系统消息。 3. **原子操作**:确保你的处理函数内部是原子操作,不会引起其他消息分发。这样可以防止一个设备事件导致多次回调。 通过上述方法,你可以有效地减少因设备更改而引起的`WM_DEVICECHANGE`消息的冗余处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值