土豆糊了 2024-01-26 15:35 采纳率: 0%
浏览 4

QPlainTextEdit实现鼠标纵向选择文本,类似下图这种

QPlainTextEdit实现鼠标纵向选择文本,类似下图这种

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-26 18:03
    关注

    【以下回答由 GPT 生成】

    我可以解决这个问题。

    要在QPlainTextEdit控件中实现鼠标纵向选择文本的功能,可以使用以下步骤:

    1. 创建一个QPlainTextEdit对象,并设置其文本内容。
    2. 为该对象连接鼠标按下事件(mousePressEvent),在事件处理函数中,获取鼠标点击的位置和当前选中的文本。
    3. 为该对象连接鼠标释放事件(mouseReleaseEvent),在事件处理函数中,获取鼠标释放的位置,并计算选中的文本范围。
    4. 将计算得到的选中文本范围设置为QPlainTextEdit的选择范围。

    下面是一个示例代码:

    // 创建QPlainTextEdit对象
    QPlainTextEdit* plainTextEdit = new QPlainTextEdit(this);
    plainTextEdit->setPlainText("This is a sample text.");
    
    // 连接鼠标按下事件
    connect(plainTextEdit, &QPlainTextEdit::mousePressEvent, [=](QMouseEvent* event){
        // 获取鼠标点击的位置
        QPoint position = event->pos();
    
        // 获取当前选中的文本
        QTextCursor cursor = plainTextEdit->cursorForPosition(position);
        QString selectedText = cursor.selectedText();
    
        // 将选中的文本设置为QPlainTextEdit的选择文本
        plainTextEdit->setPlainText(selectedText);
    });
    
    // 连接鼠标释放事件
    connect(plainTextEdit, &QPlainTextEdit::mouseReleaseEvent, [=](QMouseEvent* event){
        // 获取鼠标释放的位置
        QPoint position = event->pos();
    
        // 计算选中文本的范围
        QTextCursor cursor = plainTextEdit->cursorForPosition(position);
        cursor.setPosition(plainTextEdit->textCursor().anchor());
        cursor.setPosition(cursor.position(), QTextCursor::KeepAnchor);
    
        // 将计算得到的选中文本范围设置为QPlainTextEdit的选择范围
        plainTextEdit->setTextCursor(cursor);
    });
    

    这段示例代码中,我们创建了一个QPlainTextEdit对象,并为其连接了鼠标按下和释放事件。在鼠标按下事件中,我们获取鼠标点击的位置和当前选中的文本,并将选中的文本设置为QPlainTextEdit的文本。在鼠标释放事件中,我们获取鼠标释放的位置,并根据鼠标按下的位置和释放的位置计算选中文本范围,然后将该范围设置为QPlainTextEdit的选择范围。

    记得在你的代码中添加这些内容,并按照你的需求进行适当的修改。希望对你有帮助!如果还有其他问题,请随时问我。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月26日

悬赏问题

  • ¥15 求解决为什么json数据完整,却解析失败
  • ¥15 打开Smart schedule运行examples/transformer-xl/scripts/run_enwik8_base_moe.sh 报错
  • ¥15 求一个C# sm4 加密解密的代码
  • ¥15 想做个网络加速器,怎么实现
  • ¥20 centos7下载mysql提示DNS解析异常
  • ¥20 vx转账功能对方不能领取
  • ¥15 vue2+codemirror 运行后页面光标太大了
  • ¥15 pdfjs库如何在前端实现打印、旋转等功能
  • ¥15 combobox数据绑定问题
  • ¥15 maven打包时,为什么有的依赖打不进去包