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
小部件
在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;
}