Qt 连接到QMessageBox隐藏的信号

Qt 连接到QMessageBox隐藏的信号,qt,signals-slots,Qt,Signals Slots,我想向用户显示一个带有链接的警告QMessageBox。这是相对容易的,我只需要确保我在消息框上设置了RichText文本格式,QMessageBox设置完成其余的工作。但是,如果用户单击链接,我还想关闭消息框(就像调用done()),语义是用户确认消息并做出决定 问题:QMessageBox隐藏了来自其内部QLabel(用于存储文本)的linkActivated信号 我想我可以扩展QMessageBox类,并在构造函数中进行这种非常丑陋的攻击: QLabel *lbl = findChild&

我想向用户显示一个带有链接的警告QMessageBox。这是相对容易的,我只需要确保我在消息框上设置了RichText文本格式,
QMessageBox
设置完成其余的工作。但是,如果用户单击链接,我还想关闭消息框(就像调用
done()
),语义是用户确认消息并做出决定

问题:
QMessageBox
隐藏了来自其内部
QLabel
(用于存储文本)的
linkActivated
信号

我想我可以扩展
QMessageBox
类,并在构造函数中进行这种非常丑陋的攻击:

QLabel *lbl = findChild<QLabel*>(QString("qt_msgbox_label"));
assert(lbl != NULL);

connect(lbl, SIGNAL(linkActivated(const QString&)), this, SLOT(handle_link_activation(const QString&)));
QLabel*lbl=findChild(QString(“qt\u msgbox\u标签”);
断言(lbl!=NULL);
连接(lbl,信号(链接已激活(常量字符串&)),此,插槽(句柄链接已激活(常量字符串&));
但是,尽管使用
findChild
找到的标签不为空,并且
的“qt\u msgbox\u标签”
绝对正确(c/p'ed from source),并且没有“no-some signal/slot”消息,但当我单击链接时,我的slot永远不会被调用


我希望避免编写自己的
QDialog
,它会模仿
QMessageBox
的行为。有人知道我怎样才能捕捉到那个信号吗

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

QDesktopServices::setUrlHandler(“msgboxurl”,urlHandlerObj,“slotName”)


urlHandlerObj可能是创建消息框的对象。在插槽中,您只需隐藏消息框并在//之后加入url部分,然后使用
QDesktopServices::openUrl
打开它,但请记住,您必须在http/https前缀之前加上前缀(在某些平台上,没有“scheme”的url无法正确处理)。插槽处理url必须具有与
QDesktopServices::openUrl
static method

相同的参数,谢谢-它帮助我找出了我遗漏的主要部分(我引用):
openexternalinks:指定QLabel是否应该使用QDesktopServices::openUrl()自动打开链接,而不是发出linkActivated()信号。