Je souhaite afficher à l'utilisateur un avertissement QMessageBox avec un lien à l'intérieur. C'est relativement facile, je dois juste m'assurer que je mets le format de texte de RichText sur la boîte de message et l'installation QMessageBox
fait le reste. Cependant, je voudrais également fermer la boîte de message (comme dans some-call-call-to done()
) si l'utilisateur clique sur le lien - la sémantique étant que l'utilisateur a accusé réception du message et pris une décision.Connexion à un signal masqué par QMessageBox
Le problème: QMessageBox
masque le signal linkActivated
provenant de son interne (qui est utilisé pour stocker le texte).
Je pensais que je pouvais étendre la classe QMessageBox
et faire ce hack très laid dans le constructeur:
QLabel *lbl = findChild<QLabel*>(QString("qt_msgbox_label"));
assert(lbl != NULL);
connect(lbl, SIGNAL(linkActivated(const QString&)), this, SLOT(handle_link_activation(const QString&)));
mais bien que l'étiquette trouvée avec findChild
est non nul, et le "qt_msgbox_label"
est certainement correct (c/p 'ed de la source), et il n'y a pas de message "no such signal/slot", mon slot n'est jamais appelé quand je clique sur le lien.
Je voudrais éviter d'écrire mon propre QDialog
qui imiterait le comportement QMessageBox
. Est-ce que quelqu'un a une idée sur la façon dont je peux attraper ce signal?
Merci pour cela - cela m'a aidé à comprendre la grande partie qui me manquait (et je cite): 'openExternalLinks: Spécifie si QLabel doit automatiquement ouvrir les liens en utilisant QDesktopServices :: openUrl() au lieu d'émettre le signal linkActivated(). – laura