连接到QMessageBox隐藏的信号

时间:2010-01-12 14:12:31

标签: qt signals-slots

我想向用户显示一个警告QMessageBox,里面有一个链接。这相对简单,我只需要确保在消息框中设置RichText文本格式,QMessageBox设置完成剩下的工作。但是,如果用户点击链接,我还想关闭消息框(如在某种类型的调用done()中) - 语义是用户确认消息并做出决定

问题:QMessageBox隐藏来自内部linkActivated的{​​{1}}信号(用于存储文本)。

我以为我可以扩展QLabel类并在构造函数中执行这个非常难看的hack:

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&))); 找到的标签不为空,findChild肯定是正确的(来自源代码),并且没有“没有这样的信号/插槽”消息,当我点击链接时,我的插槽永远不会被调用。

我想避免编写自己的"qt_msgbox_label"来模仿QDialog行为。有没有人知道如何捕获这个信号?

1 个答案:

答案 0 :(得分:2)

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

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

urlHandlerObj可能是创建消息框的对象。在插槽中你可以隐藏你的消息框并在//之后使用url部分并用QDesktopServices::openUrl打开它但请记住你必须先添加http / https前缀(在某些平台上没有“scheme”的url处理不正确) )。插槽处理网址必须与QDesktopServices::openUrl静态方法

具有相同的参数