Используйте изображение или изображение в QToolTip

Есть ли способ показать картинку / изображение в QToolTip?

Я хочу показать небольшие изображения кнопок клавиатуры, чтобы объяснить пользователю, какие кнопки / ярлыки он может использовать в этом конкретном виджете.

2 ответа

Решение

Вы можете легко показать изображения с помощью следующего HTML-кода:

QToolTip::showText(QCursor::pos(), "<img src=':/icon.png'>Message", this, QRect(), 5000);

В этом примере будет показана всплывающая подсказка с изображением из ресурсов Qt и текстом в течение 5 секунд.

Для более подробной информации, вы можете увидеть это видео: https://youtu.be/X9JD8gKGZ00

Edit1:

Если вы хотите показать изображение из памяти, вы можете сохранить QImage/QPixmap в памяти (предпочтительно с использованием сжатия без потерь, например PNG) и преобразовать его в base 64 и загрузить его с HTML-кодом, например так:

QImage icon = QImage(10, 10, QImage::Format_ARGB32);
icon.fill(QColor(255, 0, 0, 100));
QByteArray data;
QBuffer buffer(&data);
icon.save(&buffer, "PNG", 100);
QString html = QString("<img src='data:image/png;base64, %0'>Message").arg(QString(data.toBase64()));
QToolTip::showText(QCursor::pos(), html, this, QRect(), 5000);

Edit2: исправил HTML-строку, как предлагает @Damon Lynch.

Что касается строки HTML, то Python 3 / PyQt, эквивалентный отличному решению user2014561 для отображения в памяти изображений, выглядит следующим образом, предполагая QPixmap (QImage будет работать так же):

buffer = QBuffer()
buffer.open(QIODevice.WriteOnly)
pixmap.save(buffer, "PNG", quality=100)
image = bytes(buffer.data().toBase64()).decode()
html = '<img src="data:image/png;base64,{}">'.format(image)
Другие вопросы по тегам