Окно сообщения "About" для GUI с Qt - PullRequest
5 голосов
/ 17 марта 2010
    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>" );

Этот код создает окно сообщения «О программе», которое я хотел получить с двумя исключениями:

1) Я хочу изменить значок в окне сообщения с файлом aaa.png

2) И я бы хотел, чтобы ссылка была кликабельной. Это выглядит как гиперссылка (она синяя и подчеркнута), но щелчок мышью не работает

Есть идеи?

Ответы [ 6 ]

2 голосов
/ 18 марта 2010

Я думаю, вы должны создать пользовательский QWidget для своего виджета about. Таким образом, вы можете поставить на виджет все, что вы хотите. Например, вы можете разместить QLabel, используя свойство openExternalLinks для кликабельной ссылки.

Чтобы отобразить пользовательское изображение на QWidget, этот пример может помочь.

1 голос
/ 04 января 2014
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();
1 голос
/ 17 марта 2010

Для иконки вам нужно просто установить значок приложения. Примерно так:

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

Что касается того, чтобы сделать ссылки кликабельными, я не думаю, что это можно сделать напрямую с помощью QMessageBox::about API.

0 голосов
/ 21 февраля 2018

main.cpp

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

mainwindow.cpp (в ваш слот, если он есть)

void MainWindow::on_aboutAction_triggered()
{
    QMessageBox::about(0, "window title", "<a href='http://www.jeffersonpalheta.com'>jeffersonpalheta.com</a>");
}
0 голосов
/ 24 декабря 2014

Для дальнейшего использования в документации указано, что типом по умолчанию для textFormat является Qt :: AutoText . Документы далее утверждают, что Qt :: AutoText интерпретируется как Qt :: RichText, если Qt :: mightBeRichText () возвращает true, иначе как Qt :: PlainText Наконец, mightBeRichText использует быструю и поэтому простую эвристику. Он в основном проверяет, есть ли что-то, похожее на тег, перед первым разрывом строки. Итак, поскольку у вас нет тега в первой строке, предполагается, что это обычный текст. Установите значение RichText явно с помощью msgBox.setTextFormat(Qt::RichText);, чтобы заставить его действовать соответственно.

0 голосов
/ 13 сентября 2011
...