Qt Utilities  5.6.0
Common Qt related C++ classes and routines used by my applications such as dialogs, widgets and models
iconbutton.cpp
Go to the documentation of this file.
1 #include "./iconbutton.h"
2 
3 #include <QStylePainter>
4 #include <QStyleOptionFocusRect>
5 #include <QKeyEvent>
6 
7 namespace Widgets {
8 
17 IconButton::IconButton(QWidget *parent) :
18  QAbstractButton(parent)
19 {
20  setCursor(Qt::ArrowCursor);
21  setFocusPolicy(Qt::NoFocus);
22 }
23 
28 {}
29 
30 QSize IconButton::sizeHint() const
31 {
32 #if QT_VERSION >= 0x050100
33  const qreal pixmapRatio = m_pixmap.devicePixelRatio();
34 #else
35  const qreal pixmapRatio = 1.0;
36 #endif
37  return QSize(m_pixmap.width() / pixmapRatio, m_pixmap.height() / pixmapRatio);
38 }
39 
40 void IconButton::paintEvent(QPaintEvent *)
41 {
42 #if QT_VERSION >= 0x050100
43  const qreal pixmapRatio = m_pixmap.devicePixelRatio();
44 #else
45  const qreal pixmapRatio = 1.0;
46 #endif
47  QStylePainter painter(this);
48  QRect pixmapRect = QRect(0, 0, m_pixmap.width() / pixmapRatio, m_pixmap.height() / pixmapRatio);
49  pixmapRect.moveCenter(rect().center());
50  painter.drawPixmap(pixmapRect, m_pixmap);
51  if(hasFocus()) {
52  QStyleOptionFocusRect focusOption;
53  focusOption.initFrom(this);
54  focusOption.rect = pixmapRect;
55 #ifdef Q_OS_MAC
56  focusOption.rect.adjust(-4, -4, 4, 4);
57  painter.drawControl(QStyle::CE_FocusFrame, focusOption);
58 #else
59  painter.drawPrimitive(QStyle::PE_FrameFocusRect, focusOption);
60 #endif
61  }
62 }
63 
64 void IconButton::keyPressEvent(QKeyEvent *event)
65 {
66  QAbstractButton::keyPressEvent(event);
67  if (!event->modifiers() && (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)) {
68  click();
69  }
70  event->accept();
71 }
72 
73 void IconButton::keyReleaseEvent(QKeyEvent *event)
74 {
75  QAbstractButton::keyReleaseEvent(event);
76  event->accept();
77 }
78 
79 }
QSize sizeHint() const
Definition: iconbutton.cpp:30
void keyReleaseEvent(QKeyEvent *event)
Definition: iconbutton.cpp:73
~IconButton()
Destroys the icon button.
Definition: iconbutton.cpp:27
void keyPressEvent(QKeyEvent *event)
Definition: iconbutton.cpp:64
void paintEvent(QPaintEvent *event)
Definition: iconbutton.cpp:40
Provides a set of extended widgets such as ClearLineEdit and ClearComboBox.
Definition: buttonoverlay.h:13
IconButton(QWidget *parent=nullptr)
Constructs an icon button.
Definition: iconbutton.cpp:17