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()
);
}注意事项
- 继承自 QPushButton
- 自动处理主题切换
- 智能内存管理
- 样式继承
- 事件处理
- 性能优化
- 主题适配
- 状态管理
最佳实践
- 合理设置时长
- 选择合适位置
- 简洁消息文本
- 处理窗口变化
- 注意性能影响
- 统一按钮样式
- 合理使用禁用
- 保持交互一致
相关组件
- QPushButton: 基类
- ElaMessageBar: 消息组件
- ElaTheme: 主题管理
- QPropertyAnimation: 动画系统