如何在Qt中将值传递给菜单操作
How Do I Pass a Value to a MenuAction in Qt?
我对Qt很陌生,我正在尝试弄清楚如何将字符串传递给MenuAction。我错过了一件小事,希望你能帮上忙。
我正在使用 TabBrowser 示例 http://doc.qt.io/qt-5/qtwebkitexamples-webkitwidgets-browser-example.html 并尝试将"复制链接文本"选项添加到菜单中,以将右键单击链接的文本内容复制到剪贴板。我可以添加菜单项并获取文本,但我看不到如何将其传递给插槽。
这是我正在使用的代码。我缺少的拼图是什么?
void WebView::copyLinkText(QString& text)
{
QClipboard* clip = QApplication::clipboard();
clip->setText(text);
}
void WebView::contextMenuEvent(QContextMenuEvent *event)
{
QWebHitTestResult r = page()->mainFrame()->hitTestContent(event->pos());
if (!r.linkUrl().isEmpty()) {
QMenu menu(this);
menu.addAction(pageAction(QWebPage::OpenLinkInNewWindow));
menu.addAction(tr("Open in New Tab"), this, SLOT(openLinkInNewTab()));
menu.addSeparator();
menu.addAction(pageAction(QWebPage::DownloadLinkToDisk));
// Add link to bookmarks...
menu.addSeparator();
menu.addAction(pageAction(QWebPage::CopyLinkToClipboard));
QString linkText = r.linkText();
QAction* action = menu.addAction(tr("Copy Link Text"), this, SLOT(copyLinkText()));
if (page()->settings()->testAttribute(QWebSettings::DeveloperExtrasEnabled))
menu.addAction(pageAction(QWebPage::InspectElement));
menu.exec(mapToGlobal(event->pos()));
return;
}
QWebView::contextMenuEvent(event);
}
类似的问题也被提出并回答,例如将参数传递给插槽以及如何使用来自Qt PushButton的点击信号传递值?那里提到了相当多的技术。对我来说,"最好"的似乎是使用 lambda 的 c++11 方式,采用自上面的一篇文章:
QAction* action = menu.addAction (tr ("Copy Link Text"));
connect (action, &QAction::triggered, this, [this]{ copyLinkText (linkText); });
这对你有用吗?我没有尝试过,对这个lambda+捕获的东西几乎没有经验......
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- 无法获取菜单选择以运行函数.C++
- 对字符串进行位操作
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- QT 窗口模式禁用菜单中的操作
- 菜单打开时,菜单中的C QT操作不会由键盘快捷键触发
- 提取接收功能或插槽中的菜单操作数据
- 菜单操作连接找不到插槽
- 如何在Qt中获取文件系统操作的上下文菜单
- 如何替换菜单中的操作
- 如何在Qt中将值传递给菜单操作
- Qt 设计器中的自定义菜单操作
- 操作菜单按钮选择bb10
- 在单独的 GUI 类(菜单、工具栏等)之间共享操作的最佳方式是什么
- c++添加操作菜单
- 如何为在运行时构造的菜单正确设置通用 QT 操作