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();
}
});注意事项
- 继承自 QTabWidget
- 自动处理主题切换
- 智能内存管理
- 事件处理
- 性能优化
- 主题适配
- 样式继承
- 状态恢复
最佳实践
- 合理设置大小
- 控制标签数量
- 优化拖拽体验
- 注意性能影响
- 统一交互方式
- 保持样式一致
- 动画流畅性
- 响应式布局
相关组件
- QTabWidget: 基类
- ElaTabBar: 标签栏组件
- ElaCustomTabWidget: 浮动窗口
- QDrag: 拖拽系统