Skip to content

ElaWidget 组件文档

概述

ElaWidget 是一个现代化的窗口组件,继承自 QWidget。它提供了标题栏、主题支持、Mica 效果等特性,适用于创建统一风格的应用窗口。

特性

  • 自定义标题栏
  • 主题支持
  • Mica 效果
  • 窗口按钮
  • 居中显示
  • 置顶控制
  • 大小控制
  • 事件处理

属性

基础属性

cpp
// 窗口置顶
Q_PROPERTY(bool isStayTop 
    READ getIsStayTop 
    WRITE setIsStayTop)

// 固定大小
Q_PROPERTY(bool isFixedSize 
    READ getIsFixedSize 
    WRITE setIsFixedSize)

// 默认关闭
Q_PROPERTY(bool isDefaultClosed 
    READ getIsDefaultClosed 
    WRITE setIsDefaultClosed)

公共方法

窗口控制

cpp
// 移动到屏幕中心
void moveToCenter();

// 设置窗口按钮
void setWindowButtonFlag(
    ElaAppBarType::ButtonType buttonFlag, 
    bool isEnable = true
);

// 设置窗口按钮组
void setWindowButtonFlags(
    ElaAppBarType::ButtonFlags buttonFlags
);

// 获取窗口按钮组
ElaAppBarType::ButtonFlags 
    getWindowButtonFlags() const;

信号

cpp
// 返回按钮点击
Q_SIGNAL void routeBackButtonClicked();

// 导航按钮点击
Q_SIGNAL void navigationButtonClicked();

// 主题切换按钮点击
Q_SIGNAL void themeChangeButtonClicked();

// 关闭按钮点击
Q_SIGNAL void closeButtonClicked();

使用示例

基础用法

1. 创建窗口

cpp
// 创建窗口
ElaWidget* window = new ElaWidget();

// 设置标题
window->setWindowTitle("My Window");

// 设置大小
window->resize(800, 600);

// 移动到屏幕中心
window->moveToCenter();

2. 窗口按钮

cpp
// 设置单个按钮
window->setWindowButtonFlag(
    ElaAppBarType::MinimizeButtonHint, 
    true
);

// 设置按钮组
window->setWindowButtonFlags(
    ElaAppBarType::StayTopButtonHint | 
    ElaAppBarType::MinimizeButtonHint | 
    ElaAppBarType::MaximizeButtonHint | 
    ElaAppBarType::CloseButtonHint
);

高级用法

1. 主题处理

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

2. 事件处理

cpp
// 连接按钮事件
connect(window, 
    &ElaWidget::navigationButtonClicked,
    this, [=]() {
    // 处理导航
});

connect(window,
    &ElaWidget::themeChangeButtonClicked,
    this, [=]() {
    // 处理主题切换
});

自定义外观

1. 背景绘制

cpp
void paintEvent(QPaintEvent* event) {
    if (!isEnableMica) {
        QPainter painter(this);
        painter.setRenderHints(
            QPainter::Antialiasing | 
            QPainter::TextAntialiasing
        );
        
        // 绘制背景
        painter.setPen(Qt::NoPen);
        painter.setBrush(
            ElaThemeColor(themeMode, WindowBase)
        );
        painter.drawRect(rect());
    }
}

2. 标题栏定制

cpp
// 获取标题栏
ElaAppBar* appBar = window->findChild<
    ElaAppBar*>();

// 设置标题栏属性
appBar->setIsStayTop(true);
appBar->setIsFixedSize(false);

注意事项

  1. 继承自 QWidget
  2. 自动处理主题切换
  3. 智能内存管理
  4. 事件处理
  5. 性能优化
  6. Mica 效果
  7. 窗口状态
  8. 按钮控制

最佳实践

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

相关组件

  • QWidget: 基类
  • ElaAppBar: 标题栏组件
  • ElaTheme: 主题系统
  • ElaApplication: 应用程序