如何添加清除选项 t qplaintextedit

How to add clear option t qplaintextedit?

本文关键字:清除 选项 qplaintextedit 添加 何添加      更新时间:2023-10-16

我有一个动态加载文本内容的qplaintexteditQString.

我想在右键单击qplaintextedit时出现的菜单中添加一个选项。如何以编程方式执行此操作,以便能够将自己的菜单项添加到默认菜单项?任何想法将不胜感激。

你可以 sublcass QPlainTextEdit 并重新实现方法contextMenuEvent(QContextMenuEvent *event) 。或者,您可以将事件过滤器添加到QPlainTextEdit并捕获QContextMenuEvent

在实现中,可以调用 QMenu *QPlainTextEdit::createStandardContextMenu(const QPoint &position) 来创建文本编辑的默认菜单,然后向其添加自定义项。

示例(子类(:

void MyTextEdit::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu* menu = createStandardContextMenu(event->pos());
    QAction* clearAction = menu->addAction("Clear");
    QAction* choosedAction = menu->exec(event->globalPos());
    //...
    delete menu;  
}

看:

  • 事件处理程序
  • 事件过滤器
  • QPlainTextEdit::contextMenuEvent
  • QPlainTextEdit::createStandardContextMenu

你必须重新实现函数: void QPlainTextEdit::contextMenuEvent(QContextMenuEvent *event)

文档中的更多详细信息 这里 : http://doc.qt.io/qt-5/qplaintextedit.html#contextMenuEvent

不需要

子类 QPlainTextEdit,也不需要使用事件过滤器。 您可以在应用程序的主小部件中完成所有操作。 以下内容对我使用Qt版本4.7.4和4.8.5有用。

在设计器中:

添加名称为"文本框"的QPlainTextEdit小部件。

在 MainWindow.h 中:

// Auto generated from MainWindow.ui
#include "ui_MainWindow.h"
class MainWindow : public QMainWindow
{
  Q_OBJECT
private:
  /// The auto generated user interface.
  Ui::MainWindowClass ui;
  ...
}

在主窗口中.cpp:

MainWindow::MainWindow( QWidget * pParent, Qt::WFlags flags )
  : QMainWindow( pParent, flags )
  , ui( )
{
    ui.textbox->setContextMenuPolicy( Qt::CustomContextMenu );
    connect( ui.textbox, SIGNAL( customContextMenuRequested( QPoint ) ),
      this, SLOT( onTextboxCustomContextMenuRequested( QPoint ) ) );
}
void MainWindow::onTextboxCustomContextMenuRequested( QPoint p )
{
  // Start with the standard menu.
  QMenu * pMenu = ui.textbox->createStandardContextMenu();
  QAction * pAction;
  // Clear.
  // Because QPlainTextEdit::clear() is a slot method, I can connect directly to it.
  pAction = new QAction( "Clear", this );
  connect( pAction, SIGNAL( triggered() ), ui.textbox, SLOT( clear() ) );
  pMenu->addAction( pAction );
  // Show the menu.
  QPoint q = ui.textbox->mapToGlobal( p );
  pMenu->exec( q );
  // The menu's ownership is transferred to me, so I must destroy it.
  delete pMenu;
}