Skip to content

ElaScrollPageArea 组件文档

概述

ElaScrollPageArea 是一个现代化的滚动页面区域组件,继承自 QWidget。它提供了圆角边框、主题适配、背景绘制等特性。

特性

  • 圆角边框
  • 主题适配
  • 背景绘制
  • 边框样式
  • 透明效果
  • 固定高度
  • 自动更新
  • 性能优化

属性

基础属性

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

样式系统

区域样式

cpp
void paintEvent(QPaintEvent* event) {
    QPainter painter(this);
    
    // 设置画笔和画刷
    painter.setPen(
        ElaThemeColor(themeMode, BasicBorder)
    );
    painter.setBrush(
        ElaThemeColor(themeMode, BasicBaseAlpha)
    );
    
    // 绘制圆角矩形
    QRect foregroundRect(
        1, 1, 
        width() - 2, 
        height() - 2
    );
    painter.drawRoundedRect(
        foregroundRect,
        borderRadius,
        borderRadius
    );
}

使用示例

基础用法

1. 创建区域

cpp
// 创建区域
ElaScrollPageArea* area = 
    new ElaScrollPageArea(this);

// 设置圆角
area->setBorderRadius(6);

// 设置大小
area->setFixedHeight(75);

2. 主题处理

cpp
// 连接主题变更信号
connect(eTheme, 
    &ElaTheme::themeModeChanged,
    this, [=](ElaThemeType::ThemeMode mode) {
    // 更新主题
    update();
});

高级用法

1. 自定义样式

cpp
// 设置背景透明
area->setStyleSheet(
    "background:transparent;"
);

// 添加阴影效果
auto shadow = new QGraphicsDropShadowEffect(
    area
);
shadow->setBlurRadius(10);
shadow->setColor(QColor(0, 0, 0, 60));
shadow->setOffset(0, 2);
area->setGraphicsEffect(shadow);

2. 布局设置

cpp
// 创建布局
QVBoxLayout* layout = 
    new QVBoxLayout(area);
layout->setContentsMargins(
    12, 12, 12, 12
);
layout->setSpacing(6);

// 添加内容
layout->addWidget(contentWidget);

私有实现

私有类

cpp
class ElaScrollPageAreaPrivate : public QObject {
    Q_OBJECT
    Q_D_CREATE(ElaScrollPageArea)
    Q_PROPERTY_CREATE_D(int, BorderRadius)
    
private:
    // 主题模式
    ElaThemeType::ThemeMode _themeMode;
};

初始化

cpp
ElaScrollPageArea::ElaScrollPageArea(
    QWidget* parent
) : QWidget{parent}
  , d_ptr(new ElaScrollPageAreaPrivate())
{
    Q_D(ElaScrollPageArea);
    d->q_ptr = this;
    
    // 初始化属性
    d->_pBorderRadius = 6;
    setFixedHeight(75);
    
    // 初始化主题
    d->_themeMode = eTheme->getThemeMode();
    
    // 连接主题信号
    connect(eTheme, 
        &ElaTheme::themeModeChanged,
        this, [=](auto themeMode) {
        d->_themeMode = themeMode;
    });
}

注意事项

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

最佳实践

  1. 合理设置大小
  2. 优化绘制性能
  3. 控制刷新频率
  4. 注意内存使用
  5. 统一交互方式
  6. 保持风格一致
  7. 动画流畅
  8. 响应式布局

相关组件

  • QWidget: 基类
  • ElaTheme: 主题系统
  • ElaScrollPage: 滚动页面
  • QPainter: 绘制系统