2010-03-17 3 views
5
QMessageBox::about(this, "About Application", 
    "<h4>Application is a one-paragraph blurb</h4>\n\n" 
"Copyright 1991-2003 Such-and-such. " 
"For technical support, call 1234-56789 or see\n" 
"<a href=\"http://www.such-and-such.com\">http://www.such-and-such.com</a>"); 

Ce code crée la boîte de message dont je voulais avoir à deux exceptions près:Un « A propos de » boîte de message pour une interface graphique avec Qt

1) Je voudrais changer l'icône dans le message boîte avec un fichier aaa.png

2) Et j'aimerais que le lien soit cliquable. Il ressemble à un lien hypertexte (il est bleu et souligné) mais le clic de la souris ne fonctionne pas

Des idées?

Répondre

2

Je pense que vous devriez créer un QWidget personnalisé pour votre widget à propos de. De cette façon, vous pouvez mettre sur le widget tout ce que vous voulez. Par exemple, vous pouvez placer QLabel en utilisant la propriété openExternalLinks pour le lien cliquable. Pour afficher une image personnalisée sur le QWidget, cette example peut aider.

1

Pour l'icône, vous devez simplement définir l'icône de l'application. Quelque chose comme ceci:

QApplication::setWindowIcon(QIcon(":/aaa.png")); // from a resource file 

En ce qui concerne l'établissement de liens cliquables, je ne pense pas que cela puisse être fait avec l'API directement QMessageBox::about.

+0

OK, peut-être que vous pourriez me dire, en général, comment nous peut créer un widget avec du texte hyperlié à l'intérieur? – Narek

1
QMessageBox msgBox; 
msgBox.setTextFormat(Qt::RichText); // this does the magic trick and allows you to click the link 
msgBox.setText("Text<br /><a href=\"http://www.such-and-such.com\">http://www.such-and-such.com</a>"); 
msgBox.setIcon(yourIcon); 
msgBox.exec(); 
0

Pour référence ultérieure, les documents indiquent que le type par défaut pour textFormat is Qt::AutoText. Les documents indiquent en outre que Qt::AutoText is interpreted as Qt::RichText if Qt::mightBeRichText() returns true, otherwise as Qt::PlainText. Enfin, mightBeRichText uses a fast and therefore simple heuristic. It mainly checks whether there is something that looks like a tag before the first line break. Donc, puisque vous n'avez pas de balise dans votre première ligne, cela suppose qu'il s'agit d'un texte brut. Définissez-le explicitement avec RichText avec msgBox.setTextFormat(Qt::RichText); pour qu'il agisse en conséquence.

0

main.cpp

QApplication app(argc, argv); 
app.setWindowIcon(QIcon(":/images/your_icon.png")); 

mainwindow.cpp (dans votre logement si vous avez un)

void MainWindow::on_aboutAction_triggered() 
{ 
    QMessageBox::about(0, "window title", "<a href='http://www.jeffersonpalheta.com'>jeffersonpalheta.com</a>"); 
}