【发布时间】:2010-01-12 14:12:30
【问题描述】:
我想向用户显示一个带有链接的警告 QMessageBox。这相对容易,我只需要确保我在消息框上设置了 RichText 文本格式,其余的由 QMessageBox 设置完成。但是,如果用户单击链接,我还想关闭消息框(如在某种呼叫done() 中) - 语义是用户确认消息并做出决定。
问题:QMessageBox 隐藏了来自其内部 QLabel(用于存储文本)的 linkActivated 信号。
我想我可以扩展 QMessageBox 类并在构造函数中做这个非常丑陋的 hack:
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 from the source),并且没有“没有这样的信号/插槽”消息,我的插槽当我点击链接时永远不会被调用。
我想避免编写我自己的 QDialog 来模仿 QMessageBox 的行为。有谁知道我如何捕捉到这个信号?
【问题讨论】:
标签: qt signals-slots