Skip to content

ElaPlainTextEdit 组件文档

概述

ElaPlainTextEdit 是一个现代化的纯文本编辑器组件,继承自 QPlainTextEdit。它提供了主题适配、动画效果、右键菜单等增强特性。

特性

  • 主题适配
  • 焦点动画
  • 右键菜单
  • 滚动条
  • 圆角边框
  • 底部标记
  • 复制粘贴
  • 撤销重做

构造函数

cpp
// 默认构造
explicit ElaPlainTextEdit(QWidget* parent = nullptr);

// 带文本构造
explicit ElaPlainTextEdit(
    const QString& text, 
    QWidget* parent = nullptr
);

右键菜单

菜单项

cpp
// 创建右键菜单
ElaMenu* menu = new ElaMenu(this);
menu->setMenuItemHeight(27);

// 撤销/重做
menu->addElaIconAction(
    ElaIconType::ArrowRotateLeft, 
    "撤销", 
    QKeySequence::Undo
);
menu->addElaIconAction(
    ElaIconType::ArrowRotateRight, 
    "恢复", 
    QKeySequence::Redo
);

// 剪切/复制/粘贴
menu->addElaIconAction(
    ElaIconType::KnifeKitchen, 
    "剪切", 
    QKeySequence::Cut
);
menu->addElaIconAction(
    ElaIconType::Copy, 
    "复制", 
    QKeySequence::Copy
);
menu->addElaIconAction(
    ElaIconType::Paste, 
    "粘贴", 
    QKeySequence::Paste
);

// 删除/全选
menu->addElaIconAction(
    ElaIconType::DeleteLeft, 
    "删除"
);
menu->addAction("全选");

动画系统

焦点动画

cpp
void focusInEvent(QFocusEvent* event) {
    // 创建标记动画
    QPropertyAnimation* markAnimation = 
        new QPropertyAnimation(style, "expandMarkWidth");
    markAnimation->setDuration(300);
    markAnimation->setEasingCurve(
        QEasingCurve::InOutSine);
    markAnimation->setStartValue(0);
    markAnimation->setEndValue(width() / 2 - 3);
    markAnimation->start();
}

样式系统

边框样式

cpp
void drawControl(CE_ShapedFrame) {
    // 绘制边框
    painter->setBrush(borderColor);
    painter->drawRoundedRect(editRect, 6, 6);
    
    // 绘制背景
    painter->setBrush(backgroundColor);
    painter->drawRoundedRect(
        innerRect, 6, 6);
    
    // 绘制底边线
    painter->setBrush(hemlineColor);
    painter->drawPath(hemlinePath);
    
    // 绘制焦点标记
    painter->setBrush(primaryColor);
    painter->drawRoundedRect(
        markRect, 2, 2);
}

使用示例

基础用法

1. 创建编辑器

cpp
// 创建编辑器
ElaPlainTextEdit* editor = 
    new ElaPlainTextEdit(this);

// 设置文本
editor->setPlainText("Hello World");

// 设置只读
editor->setReadOnly(true);

2. 处理事件

cpp
// 文本变化
connect(editor, 
    &ElaPlainTextEdit::textChanged,
    this, [=]() {
    qDebug() << "Text changed:" 
        << editor->toPlainText();
});

// 选择变化
connect(editor,
    &ElaPlainTextEdit::selectionChanged,
    this, [=]() {
    qDebug() << "Selection:" 
        << editor->textCursor().selectedText();
});

注意事项

  1. 继承自 QPlainTextEdit
  2. 自动处理主题切换
  3. 动画时长300ms
  4. 智能内存管理
  5. 事件处理
  6. 性能优化
  7. 主题适配
  8. 样式继承

最佳实践

  1. 合理设置大小
  2. 处理文本变化
  3. 注意性能影响
  4. 统一交互方式
  5. 保持样式一致
  6. 动画流畅性
  7. 响应式布局
  8. 优化用户体验

相关组件

  • QPlainTextEdit: 基类
  • ElaMenu: 右键菜单
  • ElaScrollBar: 滚动条
  • ElaTheme: 主题管理
  • QPropertyAnimation: 动画系统