Skip to content

ElaMessageButton 组件文档

概述

ElaMessageButton 是一个用于触发消息提示的按钮组件,继承自 QPushButton。它提供了便捷的消息配置和触发功能,支持多种消息类型和位置策略。

特性

  • 消息类型配置
  • 位置策略设置
  • 主题适配
  • 圆角边框
  • 阴影效果
  • 悬停效果
  • 按压效果
  • 禁用状态

属性

基础属性

cpp
// 边框圆角
Q_PROPERTY(int borderRadius READ getBorderRadius 
    WRITE setBorderRadius)

// 消息标题
Q_PROPERTY(QString barTitle READ getBarTitle 
    WRITE setBarTitle)

// 消息内容
Q_PROPERTY(QString barText READ getBarText 
    WRITE setBarText)

// 显示时长(毫秒)
Q_PROPERTY(int displayMsec READ getDisplayMsec 
    WRITE setDisplayMsec)

// 目标窗口
Q_PROPERTY(QWidget* messageTargetWidget 
    READ getMessageTargetWidget 
    WRITE setMessageTargetWidget)

// 消息类型
Q_PROPERTY(ElaMessageBarType::MessageMode messageMode 
    READ getMessageMode 
    WRITE setMessageMode)

// 位置策略
Q_PROPERTY(ElaMessageBarType::PositionPolicy positionPolicy 
    READ getPositionPolicy 
    WRITE setPositionPolicy)

构造函数

cpp
// 默认构造
explicit ElaMessageButton(QWidget* parent = nullptr);

// 带文本构造
explicit ElaMessageButton(QString text, 
    QWidget* parent = nullptr);

使用示例

基础用法

1. 创建按钮

cpp
// 创建成功消息按钮
ElaMessageButton* btn = new ElaMessageButton("提示");
btn->setBarTitle("成功");
btn->setBarText("操作已完成");
btn->setMessageMode(ElaMessageBarType::Success);
btn->setPositionPolicy(ElaMessageBarType::TopRight);
btn->setDisplayMsec(2000);

2. 自定义样式

cpp
// 设置圆角和尺寸
btn->setBorderRadius(5);
btn->setFixedSize(100, 40);

// 设置字体
QFont font = btn->font();
font.setPixelSize(15);
btn->setFont(font);

高级用法

1. 多类型消息

cpp
// 错误消息按钮
ElaMessageButton* errorBtn = new ElaMessageButton();
errorBtn->setMessageMode(ElaMessageBarType::Error);
errorBtn->setBarTitle("错误");
errorBtn->setBarText("网络连接失败");
errorBtn->setDisplayMsec(3000);

// 警告消息按钮
ElaMessageButton* warnBtn = new ElaMessageButton();
warnBtn->setMessageMode(ElaMessageBarType::Warning);
warnBtn->setBarTitle("警告");
warnBtn->setBarText("磁盘空间不足");

2. 指定目标窗口

cpp
// 在指定窗口显示消息
QWidget* targetWindow = new QWidget();
btn->setMessageTargetWidget(targetWindow);

样式系统

按钮样式

cpp
void paintEvent(QPaintEvent* event) {
    // 绘制阴影
    eTheme->drawEffectShadow(
        &painter, 
        rect(), 
        shadowWidth, 
        borderRadius
    );
    
    // 绘制背景
    painter.setBrush(isEnabled() ? 
        underMouse() ? hoverColor : baseColor 
        : disableColor);
    painter.drawRoundedRect(
        foregroundRect, 
        borderRadius, 
        borderRadius
    );
    
    // 绘制文本
    painter.setPen(isEnabled() ? 
        isPressed ? pressTextColor : textColor 
        : disableTextColor);
    painter.drawText(rect(), 
        Qt::AlignCenter, 
        text()
    );
}

注意事项

  1. 继承自 QPushButton
  2. 自动处理主题切换
  3. 智能内存管理
  4. 样式继承
  5. 事件处理
  6. 性能优化
  7. 主题适配
  8. 状态管理

最佳实践

  1. 合理设置时长
  2. 选择合适位置
  3. 简洁消息文本
  4. 处理窗口变化
  5. 注意性能影响
  6. 统一按钮样式
  7. 合理使用禁用
  8. 保持交互一致

相关组件

  • QPushButton: 基类
  • ElaMessageBar: 消息组件
  • ElaTheme: 主题管理
  • QPropertyAnimation: 动画系统