QTextEdit/QPlainTextEdit控件自定义右键菜单功能失效

2023-05-16

1、问题描述

这两个控件原生自带的菜单只有“复制”和“选择全部”两个。

想给这两个控件新增右键菜单“清除”

// QTextEdit
    ui->textEdit->document()->setMaximumBlockCount(200); //设置最大行数,超出了会自动清空
    ui->textEdit->setContextMenuPolicy(Qt::CustomContextMenu);
    QMenu *stdMenu = ui->textEdit->createStandardContextMenu();
    QAction *clearAction = new QAction(tr("清除"), ui->textEdit);
    stdMenu->addAction(clearAction);
    QObject::connect(clearAction, &QAction::triggered, [=]()
                     { ui->textEdit->clear(); });
    QObject::connect(ui->textEdit, &QTextEdit::customContextMenuRequested, [=]()
                     {
                                                            stdMenu->move(cursor().pos());
                                                            stdMenu->show(); });

    // QPlainTextEdit
    ui->plainTextEdit->setContextMenuPolicy(Qt::CustomContextMenu);
    stdMenu = ui->plainTextEdit->createStandardContextMenu();
    clearAction = new QAction(tr("清除"), ui->plainTextEdit);
    stdMenu->addAction(clearAction);
    QObject::connect(clearAction, &QAction::triggered, [=]()
                     { ui->plainTextEdit->clear(); });
    QObject::connect(ui->plainTextEdit, &QPlainTextEdit::customContextMenuRequested, [=](QPoint x)
                     {
                                                            stdMenu->move(ui->plainTextEdit->mapToGlobal(x));
                                                            stdMenu->show(); });

这样的结果是“清除”是添加上去了。但是“复制”和“选择全部”这两个选项鼠标点击之后却发现无效,功能缺失了。

2、解决办法:

// QTextEdit
    ui->textEdit->document()->setMaximumBlockCount(200); //设置最大行数,超出了会自动清空
    ui->textEdit->setContextMenuPolicy(Qt::CustomContextMenu);

    QAction *copyAction = new QAction(tr("复制"), ui->textEdit);
    copyAction->setShortcut(QKeySequence::Copy);
    copyAction->setShortcutContext(Qt::WidgetShortcut);

    QAction *selectAllAction = new QAction(tr("选择全部"), ui->textEdit);
    selectAllAction->setShortcut(QKeySequence::SelectAll);
    selectAllAction->setShortcutContext(Qt::WidgetShortcut);

    QAction *clearAction = new QAction(tr("清除"), ui->textEdit);

    QMenu *contextMenu = new QMenu(ui->textEdit);
    contextMenu->addAction(copyAction);
    contextMenu->addSeparator();
    contextMenu->addAction(selectAllAction);
    contextMenu->addSeparator();
    contextMenu->addAction(clearAction);

    QObject::connect(copyAction, SIGNAL(triggered()), ui->textEdit, SLOT(copy()));
    QObject::connect(selectAllAction, SIGNAL(triggered()), ui->textEdit, SLOT(selectAll()));
    QObject::connect(clearAction, &QAction::triggered, [=]()
                     { ui->textEdit->clear(); });
    QObject::connect(ui->textEdit, &QTextEdit::customContextMenuRequested, [=]()
                     {
                                                            contextMenu->move(cursor().pos());
                                                            contextMenu->show(); });

    // QPlainTextEdit
    ui->plainTextEdit->setContextMenuPolicy(Qt::CustomContextMenu);

    copyAction = new QAction(tr("复制"), ui->plainTextEdit);
    copyAction->setShortcut(QKeySequence::Copy);
    copyAction->setShortcutContext(Qt::WidgetShortcut);

    selectAllAction = new QAction(tr("选择全部"), ui->plainTextEdit);
    selectAllAction->setShortcut(QKeySequence::SelectAll);
    selectAllAction->setShortcutContext(Qt::WidgetShortcut);

    clearAction = new QAction(tr("清除"), ui->plainTextEdit);

    contextMenu = new QMenu(ui->plainTextEdit);
    contextMenu->addAction(copyAction);
    contextMenu->addSeparator();
    contextMenu->addAction(selectAllAction);
    contextMenu->addSeparator();
    contextMenu->addAction(clearAction);

    QObject::connect(copyAction, SIGNAL(triggered()), ui->plainTextEdit, SLOT(copy()));
    QObject::connect(selectAllAction, SIGNAL(triggered()), ui->plainTextEdit, SLOT(selectAll()));
    QObject::connect(clearAction, &QAction::triggered, [=]()
                     { ui->plainTextEdit->clear(); });
    QObject::connect(ui->plainTextEdit, &QPlainTextEdit::customContextMenuRequested, [=](QPoint x)
                     {
                                                            contextMenu->move(ui->plainTextEdit->mapToGlobal(x));
                                                            contextMenu->show(); });

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QTextEdit/QPlainTextEdit控件自定义右键菜单功能失效 的相关文章

  • QTextEdit/QPlainTextEdit控件自定义右键菜单功能失效

    1 问题描述 这两个控件原生自带的菜单只有 复制 和 选择全部 两个 想给这两个控件新增右键菜单 清除 QTextEdit ui gt textEdit gt document gt setMaximumBlockCount 200 设置最
  • Qt实现十六进制接收文本和显示文本(可用于串口的十六进制)

    1 QTextEdit接收文本 QString str1 ui gt textEdit gt toPlainText QByteArray str2 QByteArray fromHex str1 toLatin1 data 按十六进制编码
  • 从 QTextEdit 中删除一行/块

    我正在努力删除块 线QTextEdit 下面的代码应该 工作 但由于某些我未知的原因 它最终陷入无限循环 我怀疑next and previous 如果QTextDocument正在编辑中 QTextBlock block document
  • 如何在 QPlainTextEdit 中为突出显示的字符串创建工具提示

    我有一个 QPlainTextEdit 并且其中突出显示了一些单词 现在我希望当我用鼠标悬停在它上面时 它会向我显示一个工具提示 其中包含有关此突出显示单词的描述或类似内容 在 QT IDE 中类似这样 但我不知道如何开始这个所以任何想法
  • QTextEdit 中的可点击超链接

    我想用QTextEdit 在只读模式下 显示可点击的超链接 我曾经这样做过 QTextEdit textEdit new QTextEdit QTextCursor cursor textEdit gt document textEdit
  • 如何将文本附加到 QPlainTextEdit 而不添加换行符,并保持滚动在底部?

    我需要将文本附加到QPlainTextEdit无需在文本中添加换行符 但这两种方法appendPlainText and appendHtml 实际上添加了新段落 我可以手动执行此操作QTextCursor QTextCursor text
  • 在对话框中的 QTextEdit 中按 Tab - 更改行为

    I have QDialog包含几个按钮和一个QTextEdit 在写了一些东西之后QTextEdit 我按 Tab 键以到达其中一个按钮 但是当我按 Tab 键时 会在QTextEdit 我怎样才能改变这种行为 您可以使用设置TabCha
  • 用线条替换 QTextEdit 边界框

    这个问题是对边界框 https stackoverflow com questions 46911925 getting the bounding box of qtextedit selection例子 我试图了解如何绘制简单的形状 我只
  • 如何在 QTextEdit 中为 QTextFrame 或 QTextBlock 提供背景图像?

    我正在开发一个 IM 工具 作为它的一部分 我必须开发一个BubbleChatWidget所有消息项都有一个bubble like背景图像 我以为我可以实现我的目标QTextEidt 但我不知道如何给出 QTextFrame 或QTextB
  • 如何从 QTextEdit 或 QPlainTextEdit 小部件获取当前可见的文本?

    这似乎是一件很常见的事情 但我找不到如何做 我有一个带有一堆文本的 QTextEdit 或 QPlainTextEdit 小部件 足够了 滚动是必要的 我想要另一个小部件提供有关当前可见文本的一些信息 为此 我需要知道 当可见文本发生变化时
  • QTextCursor 和 beginEditBlock

    我在 QPlainTextEdit 中有一些文本 每行以 10 个空格开头 line1 line2 line3 line4 然后 我选择几行 并在循环中我想从所有选定的行中删除前两个空格 cursor beginEditBlock for
  • 如何在 QTextEdit 中调整图像大小?

    如何在 QTextEdit 中单击图像 按住图像的一角并调整图像大小 或者至少如何获取光标下的图像 选择该图像以更改宽度和高度 这是我的实施方式 void AdvancedTextEdit resizeImage QTextBlock cu
  • 如何设置QTextEdit的PlaceHolderText

    我想设置一个占位符文本QTextEdit 我知道如何将其设置为QLineEdit 有一个财产setPlaceHolderText 但此属性不适用于QTextEdit 请提出您宝贵的建议来解决这个问题 Use QTextEdit的功能 使用以
  • 我可以使用简单的 html 来创建单行大小的 QTextEdit 吗?

    我需要显示简单的状态行以及包含以下样式的文本 color bold italic QTextEdit可以渲染简单的 HTML 但它也强制扩展到多行 添加红色背景以强调尺寸QTextEdit 所需的大小是一个文本行的大小 我该如何实现这一目标
  • 如何确定 QTextDocument 的高度?

    给定一个特定的宽度 我想找出一个的高度QTextDocument 换句话说 如果QTextEdit其中包含QTextDocument is w宽 最小高度是多少h为了完全显示文档而不需要滚动条 将 QTextDocument 对象的宽度设置
  • Qt formlayout 不垂直扩展 qplaintextedit

    我很困惑为什么Q纯文本编辑添加到窗口小部件时不会垂直调整大小QForm布局 在下面的代码中 文本字段可以正确地水平缩放 但不会垂直缩放 任何人都可以解释这种行为并提供解决方案吗 我已经尝试了所有我知道的技巧 但没有成功 from PyQt4
  • 如何在 QTextEdit 中插入图像?

    所以我试图在 Qtexteditor 上插入图像 到目前为止我只能将 Qtexteditor 全部变成白色 我尝试了以下方法 ACTIVATED CSS QTextEdit image url einstein jpg 因此 我以随机顺序接
  • QTextEdit 中的水平线

    我试图在一个水平线QTextDocument 我使用 HTML 进行格式化 为了画出我想要的线条 我自然地使用了 hr 标签 但这条线是灰色的 我想把它的颜色改为黑色 这些样式似乎不适用于hr元素 那么有没有一个简单的解决方法可以在我的文档
  • QTextEdit::setTextFormat(Qt::LogText) 不再存在,我还能用什么来记录?

    我的 C 应用程序中需要一个文本记录器 QTextEdit在 Qt 3 3 之前曾经有此功能 但不幸的是它已被删除 我可以使用其他替代方案吗 两种选择 你可以简单地使用QTextEdit setReadOnly true 这 老的Qt Lo
  • 如何在QTextEdit中自动滚动文本(动画效果)?

    我想问一下如何让QTextEdit中的文字滚动 达到动画效果 动画效果应该类似于视频中所示的效果 https www youtube com watch v MyeuGdXv4XM https www youtube com watch v

随机推荐