我想向用户显示一个警告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
行为。有没有人知道如何捕获这个信号?
答案 0 :(得分:2)
尝试定义自己的链接“协议”,即msgboxurl://yoururl.is.here并为其安装url处理程序
QDesktopServices::setUrlHandler("msgboxurl", urlHandlerObj, "slotName");
urlHandlerObj可能是创建消息框的对象。在插槽中你可以隐藏你的消息框并在//之后使用url部分并用QDesktopServices::openUrl
打开它但请记住你必须先添加http / https前缀(在某些平台上没有“scheme”的url处理不正确) )。插槽处理网址必须与QDesktopServices::openUrl
静态方法