代码之家  ›  专栏  ›  技术社区  ›  laura

连接到qmessagebox隐藏的信号

  •  1
  • laura  · 技术社区  · 15 年前

    我想给用户显示一个带有链接的警告qmessagebox。这相对简单,我只需要确保在消息框和 QMessageBox 其余由安装程序完成。但是,我也希望关闭消息框(如在某种调用中 done() )如果用户点击链接——语义是用户确认消息并做出决定。

    问题: Q消息框 隐藏 linkActivated 信号从内部发出 QLabel (用于存储文本)。

    我想我可以延长 qMaskbox 类并在构造函数中执行这个非常难看的黑客操作:

    QLabel *lbl = findChild<QLabel*>(QString("qt_msgbox_label"));
    assert(lbl != NULL);
    
    connect(lbl, SIGNAL(linkActivated(const QString&)), this, SLOT(handle_link_activation(const QString&)));
    

    但是尽管标签上有 findChild 不为空,并且 "qt_msgbox_label" 是绝对正确的(来自源代码的C/P'ed),并且没有“没有这样的信号/插槽”消息,当我点击链接时,我的插槽永远不会被调用。

    我不想写我自己的 QDialog 它会模仿 qMaskbox 行为。有人知道我怎样才能捕捉到那个信号吗?

    1 回复  |  直到 13 年前
        1
  •  2
  •   Kamil Klimek    15 年前

    尝试定义自己的链接“协议”,即msgboxurl://your url.is.here,并为其安装URL处理程序。

    QDesktopServices::setUrlHandler("msgboxurl", urlHandlerObj, "slotName");

    urlhandlerobj可能是创建消息框的对象。在插槽中,您只需隐藏消息框并在//后加入URL部分,然后用打开它 QDesktopServices::openUrl 但请记住,您必须先加上http/https前缀(在某些没有“scheme”的平台上,没有正确处理URL)。插槽处理URL的参数必须与 QDeskTopServices::OpenURL 静态法