summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/aspectratiolabel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/aspectratiolabel.cpp')
-rw-r--r--src/libs/installer/aspectratiolabel.cpp51
1 files changed, 49 insertions, 2 deletions
diff --git a/src/libs/installer/aspectratiolabel.cpp b/src/libs/installer/aspectratiolabel.cpp
index c8c3c1693..b5a21424d 100644
--- a/src/libs/installer/aspectratiolabel.cpp
+++ b/src/libs/installer/aspectratiolabel.cpp
@@ -1,6 +1,6 @@
/**************************************************************************
**
-** Copyright (C) 2020 The Qt Company Ltd.
+** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Installer Framework.
@@ -28,6 +28,9 @@
#include "aspectratiolabel.h"
+#include <QDesktopServices>
+#include <QTimer>
+
using namespace QInstaller;
/*!
@@ -42,16 +45,35 @@ using namespace QInstaller;
*/
AspectRatioLabel::AspectRatioLabel(QWidget *parent)
: QLabel(parent)
+ , m_discardMousePress(false)
{
setMinimumSize(1, 1);
setScaledContents(false);
+ setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
}
/*!
- Sets the \a pixmap shown on the label. Setting a new pixmap clears the previous content.
+ Sets the \a pixmap shown on the label. Setting a new pixmap clears
+ the previous content.
+
+ \note This redefines the non-virtual slot of the same signature from the
+ QLabel base class, which results in non polymorphic behavior when
+ called via a base class pointer.
*/
void AspectRatioLabel::setPixmap(const QPixmap &pixmap)
{
+ setPixmapAndUrl(pixmap, QString());
+}
+
+/*!
+ Sets the \a pixmap shown on the label and an \a url. Setting a new
+ pixmap clears the previous content. When clicking the \a pixmap, \a url
+ is opened in a browser. If the \a url is a reference to a file, it will
+ be opened with a suitable application instead of a Web browser.
+*/
+void AspectRatioLabel::setPixmapAndUrl(const QPixmap &pixmap, const QString &url)
+{
+ m_clickableUrl = url;
m_pixmap = pixmap;
QLabel::setPixmap(scaledPixmap());
}
@@ -98,3 +120,28 @@ void AspectRatioLabel::resizeEvent(QResizeEvent *event)
if (!m_pixmap.isNull())
QLabel::setPixmap(scaledPixmap());
}
+
+/*!
+ \reimp
+*/
+void AspectRatioLabel::mousePressEvent(QMouseEvent* event)
+{
+ Q_UNUSED(event)
+ if (!m_clickableUrl.isEmpty() && !m_discardMousePress)
+ QDesktopServices::openUrl(m_clickableUrl);
+}
+
+/*!
+ \reimp
+*/
+bool AspectRatioLabel::event(QEvent *e)
+{
+ if (e->type() == QEvent::WindowActivate) {
+ QTimer::singleShot(100, [&]() {
+ m_discardMousePress = false;
+ });
+ } else if (e->type() == QEvent::WindowDeactivate) {
+ m_discardMousePress = true;
+ }
+ return QLabel::event(e);
+}