Skip to content

ElaTabWidget 组件文档

概述

ElaTabWidget 是一个现代化的标签页组件,继承自 QTabWidget。它提供了拖拽分离、主题适配、自定义标签栏等特性。

特性

  • 拖拽分离
  • 主题适配
  • 自定义标签栏
  • 标签关闭
  • 标签移动
  • 浮动窗口
  • 状态恢复
  • 透明背景

属性

基础属性

cpp
// 标签栏透明
Q_PROPERTY(bool isTabTransparent 
    READ getIsTabTransparent 
    WRITE setIsTabTransparent)

公共方法

标签位置

cpp
// 设置标签位置(仅支持上下)
void setTabPosition(TabPosition position);

拖拽系统

拖拽数据

cpp
QMimeData* mimeData {
    "DragType": "ElaTabBarDrag",
    "TabIndex": int,
    "TabIcon": QIcon,
    "TabText": QString,
    "DragWidget": QWidget*,
    "ElaTabWidgetObject": ElaTabWidget*,
    "ElaTabBarObject": ElaTabBar*
};

浮动窗口

cpp
// 创建浮动窗口
ElaCustomTabWidget* floatWidget = 
    new ElaCustomTabWidget(originTabWidget);

// 添加拖拽标签
floatWidget->addTab(
    dragWidget, 
    tabIcon, 
    tabText
);

// 设置位置
floatWidget->move(
    cursorX - width/2, 
    cursorY - 40
);

使用示例

基础用法

1. 创建标签页

cpp
// 创建标签页
ElaTabWidget* tabWidget = 
    new ElaTabWidget(this);

// 添加标签
tabWidget->addTab(widget1, "标签1");
tabWidget->addTab(widget2, icon, "标签2");

// 设置当前标签
tabWidget->setCurrentIndex(0);

2. 标签栏设置

cpp
// 设置标签位置
tabWidget->setTabPosition(
    QTabWidget::North
);

// 设置透明背景
tabWidget->setIsTabTransparent(true);

3. 拖拽处理

cpp
// 标签拖拽
connect(tabBar, 
    &ElaTabBar::tabDragCreate,
    this, [=](QDrag* drag) {
    // 处理拖拽创建
});

// 标签放下
connect(tabBar, 
    &ElaTabBar::tabDragDrop,
    this, [=](const QMimeData* data) {
    // 处理标签放下
});

4. 关闭处理

cpp
// 标签关闭
connect(tabBar, 
    &ElaTabBar::tabCloseRequested,
    this, [=](int index) {
    // 处理标签关闭
    QWidget* widget = 
        tabWidget->widget(index);
    // 恢复到原始标签页
    if (originTabWidget) {
        originTabWidget->addTab(
            widget, icon, text
        );
    } else {
        tabWidget->removeTab(index);
        widget->deleteLater();
    }
});

注意事项

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

最佳实践

  1. 合理设置大小
  2. 控制标签数量
  3. 优化拖拽体验
  4. 注意性能影响
  5. 统一交互方式
  6. 保持样式一致
  7. 动画流畅性
  8. 响应式布局

相关组件

  • QTabWidget: 基类
  • ElaTabBar: 标签栏组件
  • ElaCustomTabWidget: 浮动窗口
  • QDrag: 拖拽系统