Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何添加清除选项t qplaintextedit?_C++_Qt - Fatal编程技术网

C++ 如何添加清除选项t qplaintextedit?

C++ 如何添加清除选项t qplaintextedit?,c++,qt,C++,Qt,我有一个qplaintextedit,它通过QString动态加载文本内容 我想在右键单击qplaintextedit时显示的菜单中添加一个选项。如何以编程方式将自己的菜单项添加到默认菜单项?如果您有任何想法,我们将不胜感激。您必须重新实现该函数:void QPlainTextEdit::contextMenuEvent(QContextMenuEvent*事件) 这里的文档中有更多详细信息:您可以子案例QPlainTextEdit并重新实现方法contextMenuEvent(QContext

我有一个
qplaintextedit
,它通过
QString
动态加载文本内容


我想在右键单击qplaintextedit时显示的菜单中添加一个选项。如何以编程方式将自己的菜单项添加到默认菜单项?如果您有任何想法,我们将不胜感激。

您必须重新实现该函数:
void QPlainTextEdit::contextMenuEvent(QContextMenuEvent*事件)


这里的文档中有更多详细信息:

您可以子案例
QPlainTextEdit
并重新实现方法
contextMenuEvent(QContextMenuEvent*事件)
。或者,您可以将事件筛选器添加到
QPlainTextEdit
并捕获
QContextMenuEvent

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

示例(子类):

见:


无需子类QPlainTextEdit,也无需使用事件过滤器。您可以在应用程序的主窗口小部件中完成这一切。使用Qt版本4.7.4和4.8.5,以下内容对我有效

在设计器中:

您添加了一个名为“textbox”的
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;
  ...
}
在MainWindow.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;
}

我使用拖放制作了qplaintextedit框。如果我以编程方式制作了整个内容,那么您的解决方案将是可行的。@Sumeet-所谓“拖放”,是指使用Qt设计器吗?如果是这样,您可以使用Designer上下文菜单中的“升级的小部件…”将您的
QPlainTextEdit
转换为
MyTextEdit
。当然,您仍然必须实现
MyTextEdit
。@TobySpeight如果这样做,则会在ui文件中出现错误,因为它会更改所有构造函数。@TobySpeight Hey在我右键单击时已经有了删除选项,但默认情况下是禁用的。我可以在默认情况下启用它吗。
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;
}