我正在尝试为我的Qt应用程序中的QTextBrowser添加自定义contextMenu,但它似乎不起作用。
我正在使用为元素QLineEdit定义的以下链接中解释的步骤,但它不起作用。
extend-the-standard-context-menu-of-qtextedit
修改
我在MainWindow的构造函数中编写了以下代码:
QDockWidget *dock = new QDockWidget(tr("Text View"), this);
txtBrwsr = new QTextBrowser(this);
dock->setWidget(txtBrwsr);
txtBrwsr->setContextMenuPolicy(Qt::CustomContextMenu);
connect(txtBrwsr,SIGNAL(customContextMenuRequested(const QPoint&)), this,SLOT(showContextMenu(const QPoint&)));
setCentralWidget(txtBrwsr);
以下是showContextMenu函数的实现: void AMTMainWindow :: showContextMenu(const QPoint& pt){
QMenu * menu = txtBrwsr->createStandardContextMenu();
QMenu * tags;
tags = menu->addMenu(tr("&Tag"));
for(int i=0; i<_atagger->tagTypeVector->count(); i++) {
QAction * taginstance;
char * tagValue = (_atagger->tagTypeVector->at(i)).tag.toLocal8Bit().data();
taginstance = new QAction(tr(tagValue), this);
connect(taginstance, SIGNAL(triggered()), this, SLOT(tag(tagValue)));
tags->addAction(taginstance);
}
menu->addAction(untagAct);
menu->addAction(addtagAct);
menu->exec(txtBrwsr->mapToGlobal(pt));
delete menu;
}
经过一些调试后,我发现当按下右键单击应该打开上下文菜单时,showContextMenu函数甚至没有被触发。所以我认为主要问题在于连接功能。
感谢任何帮助。
答案 0 :(得分:1)
您在此处创建后立即删除菜单:
[...]
menu->addAction(addtagAct);
menu->exec(txtBrwsr->mapToGlobal(pt));
<强> delete menu;
强>