Projet e-stok  0.2
BTS SNIR LaSalle Avignon 2020
Référence de la classe Keyboard

Déclaration de la classe Keyboard. Plus de détails...

#include <Keyboard.h>

Graphe de collaboration de Keyboard:
Collaboration graph

Connecteurs publics

void hideKeyboard ()
 
bool keyboardVisible () const
 
void showKeyboard (int globalX, int globalY)
 

Signaux

void keyClicked (const QString &text)
 
void specialKeyClicked (int key)
 

Fonctions membres publiques

void setLineEdit (QLineEdit *lineEdit)
 

Fonctions membres publiques statiques

static KeyboardgetInstance (QWidget *parent=Q_NULLPTR)
 
static KeyboardgetInstance (QLineEdit *lineEdit, QWidget *parent=Q_NULLPTR)
 

Fonctions membres protégées

void paintEvent (QPaintEvent *e)
 

Connecteurs privés

void buttonClicked (int key)
 
void focusChange (QWidget *, QWidget *)
 
void keyboardKeyClicked (const QString &characters)
 
void keyboardSpecialKeyClicked (int key)
 

Fonctions membres privées

void init ()
 
 Keyboard (QLineEdit *lineEdit=Q_NULLPTR, QWidget *parent=Q_NULLPTR)
 
QString keyToCharacter (int key)
 
void makeCapsLock ()
 

Attributs privés

QPushButtonbuttonEsc
 
bool capsLock
 
QGridLayout * gridLayout
 
QHBoxLayout * hBoxLayout
 
QLineEdit * lineEdit
 
QSignalMapper * mapper
 
bool mask
 
QStackedWidget * stackedWidget
 

Attributs privés statiques

static Keyboardinstance = Q_NULLPTR
 

Description détaillée

Déclaration de la classe Keyboard.

Cette classe permet de gérer un clavier virtuel

Définition à la ligne 22 du fichier Keyboard.h.

Documentation des constructeurs et destructeur

◆ Keyboard()

Keyboard::Keyboard ( QLineEdit *  lineEdit = Q_NULLPTR,
QWidget parent = Q_NULLPTR 
)
explicitprivate

Définition à la ligne 100 du fichier Keyboard.cpp.

Références focusChange(), init(), keyboardKeyClicked(), keyboardSpecialKeyClicked(), keyClicked(), lineEdit, et specialKeyClicked().

100  : QWidget(parent), lineEdit(lineEdit), capsLock(false), mask(false)
101 {
102 #ifdef DEBUG_KEYBOARD
103  qDebug() << Q_FUNC_INFO << this << lineEdit;
104 #endif
105  init();
106  connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)), this, SLOT(focusChange(QWidget*,QWidget*)));
107  connect(this, SIGNAL(keyClicked(QString)), this, SLOT(keyboardKeyClicked(QString)));
108  connect(this, SIGNAL(specialKeyClicked(int)), this, SLOT(keyboardSpecialKeyClicked(int)));
109  setStyleSheet("/*QWidget{background-color:white;}*/QPushButton{font-family:\"Ubuntu Mono\";font:bold;font-size:16px;background-color:palegoldenrod;border-width:1px;border-color:darkkhaki;border-style:solid;border-radius:5;padding:1px;}QPushButton:hover{background-color:khaki;}QPushButton:pressed{background-color:#d0d67c;}");
110  setAttribute(Qt::WA_TranslucentBackground, true);
111 }
bool capsLock
Definition: Keyboard.h:36
QLineEdit * lineEdit
Definition: Keyboard.h:34
void keyboardSpecialKeyClicked(int key)
Definition: Keyboard.cpp:223
void focusChange(QWidget *, QWidget *)
Definition: Keyboard.cpp:204
bool mask
Definition: Keyboard.h:37
void init()
Definition: Keyboard.cpp:263
void keyClicked(const QString &text)
void specialKeyClicked(int key)
void keyboardKeyClicked(const QString &characters)
Definition: Keyboard.cpp:249

Documentation des fonctions membres

◆ buttonClicked

void Keyboard::buttonClicked ( int  key)
privateslot

Définition à la ligne 162 du fichier Keyboard.cpp.

Références capsLock, gridLayout, hBoxLayout, keyClicked(), keyToCharacter(), lineEdit, makeCapsLock(), mask, specialKeyClicked(), et stackedWidget.

Référencé par init().

163 {
164 #ifdef DEBUG_KEYBOARD
165  qDebug() << Q_FUNC_INFO << key;
166 #endif
167  if ((key == Qt::Key_Escape))
168  {
169  mask = !mask;
170  if(mask)
171  {
172  setFixedSize(hBoxLayout->sizeHint());
173  stackedWidget->setCurrentIndex(1);
174  }
175  else
176  {
177  setFixedSize(gridLayout->sizeHint());
178  stackedWidget->setCurrentIndex(0);
179  }
180  return;
181  }
182  if ((key == Qt::Key_CapsLock))
183  {
184  capsLock = !capsLock;
185  makeCapsLock();
186  return;
187  }
188  if ((key == Qt::Key_Delete))
189  {
190  if(lineEdit)
191  lineEdit->clear();
192  return;
193  }
194  if ((key == Qt::Key_Enter) || (key == Qt::Key_Backspace))
195  {
196  emit specialKeyClicked(key);
197  }
198  else
199  {
200  emit keyClicked(keyToCharacter(key));
201  }
202 }
bool capsLock
Definition: Keyboard.h:36
QGridLayout * gridLayout
Definition: Keyboard.h:31
QStackedWidget * stackedWidget
Definition: Keyboard.h:30
QLineEdit * lineEdit
Definition: Keyboard.h:34
void makeCapsLock()
Definition: Keyboard.cpp:317
QHBoxLayout * hBoxLayout
Definition: Keyboard.h:32
bool mask
Definition: Keyboard.h:37
void keyClicked(const QString &text)
QString keyToCharacter(int key)
Definition: Keyboard.cpp:345
void specialKeyClicked(int key)

◆ focusChange

void Keyboard::focusChange ( QWidget oldWidget,
QWidget newWidget 
)
privateslot

Définition à la ligne 204 du fichier Keyboard.cpp.

Références hideKeyboard(), lineEdit, et showKeyboard().

Référencé par Keyboard().

205 {
206  if(!lineEdit || !newWidget)
207  return;
208 #ifdef DEBUG_KEYBOARD
209  qDebug() << Q_FUNC_INFO << oldWidget << newWidget;
210 #endif
211  if(newWidget == lineEdit)
212  {
213  QPoint globalPos(0, 0);
214  globalPos = newWidget->mapToGlobal(QPoint(0, newWidget->height()));
215  showKeyboard(globalPos.x(), globalPos.y());
216  }
217  else
218  {
219  hideKeyboard();
220  }
221 }
void showKeyboard(int globalX, int globalY)
Definition: Keyboard.cpp:136
QLineEdit * lineEdit
Definition: Keyboard.h:34
void hideKeyboard()
Definition: Keyboard.cpp:152

◆ getInstance() [1/2]

static Keyboard* Keyboard::getInstance ( QWidget parent = Q_NULLPTR)
static

Référencé par Ihm::Ihm().

◆ getInstance() [2/2]

Keyboard * Keyboard::getInstance ( QLineEdit *  lineEdit,
QWidget parent = Q_NULLPTR 
)
static

Définition à la ligne 90 du fichier Keyboard.cpp.

91 {
92  if(instance == Q_NULLPTR)
93  {
94  instance = new Keyboard(lineEdit, parent);
95  }
96  return instance;
97 }
static Keyboard * instance
Definition: Keyboard.h:28
QLineEdit * lineEdit
Definition: Keyboard.h:34
Keyboard(QLineEdit *lineEdit=Q_NULLPTR, QWidget *parent=Q_NULLPTR)
Definition: Keyboard.cpp:100

◆ hideKeyboard

void Keyboard::hideKeyboard ( )
slot

Définition à la ligne 152 du fichier Keyboard.cpp.

Référencé par focusChange().

153 {
154  QWidget::hide();
155 }

◆ init()

void Keyboard::init ( )
private

Définition à la ligne 263 du fichier Keyboard.cpp.

Références buttonClicked(), buttonEsc, gridLayout, hBoxLayout, layoutSize, mapper, NEXT_ROW_MARKER, et stackedWidget.

Référencé par Keyboard().

264 {
265  setWindowFlags(Qt::WindowDoesNotAcceptFocus | Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::BypassWindowManagerHint);
266 
267  stackedWidget = new QStackedWidget(this);
268  QWidget *widgetKeyboard = new QWidget(stackedWidget);
269  QWidget *widgetMask = new QWidget(stackedWidget);
270 
271  gridLayout = new QGridLayout(widgetKeyboard);
272  hBoxLayout = new QHBoxLayout(widgetMask);
273 
274  mapper = new QSignalMapper(this);
275  connect(mapper, SIGNAL(mapped(int)), SLOT(buttonClicked(int)));
276 
277  int row = 0;
278  int column = 0;
279 
280  for (int i = 0; i < layoutSize; ++i)
281  {
282  if (keyboardLayout[i].key == NEXT_ROW_MARKER)
283  {
284  row++;
285  column = 0;
286  continue;
287  }
288 
289  QPushButton *button = new QPushButton(this);
290  if (keyboardLayout[i].key == Qt::Key_Enter)
291  button->setFixedWidth(55);
292  else
293  button->setFixedWidth(35);
294  button->setFixedHeight(25);
295  button->setText(QString::fromUtf8(keyboardLayout[i].label));
296 
297  mapper->setMapping(button, keyboardLayout[i].key);
298  connect(button, SIGNAL(clicked()), mapper, SLOT(map()));
299 
300  if (keyboardLayout[i].key == Qt::Key_Escape)
301  {
302  buttonEsc = new QPushButton(this);
303  buttonEsc->setFixedWidth(35);
304  buttonEsc->setText(QString::fromUtf8(keyboardLayout[i].label));
305  mapper->setMapping(buttonEsc, keyboardLayout[i].key);
306  connect(buttonEsc, SIGNAL(clicked()), mapper, SLOT(map()));
307  hBoxLayout->addWidget(buttonEsc);
308  }
309  gridLayout->addWidget(button, row, column);
310  column++;
311  }
312  widgetMask->setFixedSize(hBoxLayout->sizeHint());
313  stackedWidget->addWidget(widgetKeyboard);
314  stackedWidget->addWidget(widgetMask);
315 }
QSignalMapper * mapper
Definition: Keyboard.h:33
QGridLayout * gridLayout
Definition: Keyboard.h:31
QStackedWidget * stackedWidget
Definition: Keyboard.h:30
QPushButton * buttonEsc
Definition: Keyboard.h:35
void buttonClicked(int key)
Definition: Keyboard.cpp:162
#define NEXT_ROW_MARKER
Definition: Keyboard.cpp:16
QHBoxLayout * hBoxLayout
Definition: Keyboard.h:32
KeyboardLayoutEntry keyboardLayout[]
Definition: Keyboard.cpp:26
static const int layoutSize
Definition: Keyboard.cpp:85

◆ keyboardKeyClicked

void Keyboard::keyboardKeyClicked ( const QString &  characters)
privateslot

Définition à la ligne 249 du fichier Keyboard.cpp.

Références lineEdit.

Référencé par Keyboard().

250 {
251 #ifdef DEBUG_KEYBOARD
252  qDebug() << Q_FUNC_INFO << lineEdit << characters;
253 #endif
254  if (!lineEdit)
255  return;
256 
257  QInputMethodEvent event;
258  event.setCommitString(characters);
259 
260  QGuiApplication::sendEvent(lineEdit, &event);
261 }
QLineEdit * lineEdit
Definition: Keyboard.h:34

◆ keyboardSpecialKeyClicked

void Keyboard::keyboardSpecialKeyClicked ( int  key)
privateslot

Définition à la ligne 223 du fichier Keyboard.cpp.

Références lineEdit.

Référencé par Keyboard().

224 {
225 #ifdef DEBUG_KEYBOARD
226  qDebug() << Q_FUNC_INFO << this << key;
227 #endif
228  if (!lineEdit)
229  return;
230 
231  if (key == Qt::Key_Enter)
232  {
233  QKeyEvent *pressEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
234  QGuiApplication::postEvent(lineEdit, pressEvent);
235 
236  QKeyEvent *releaseEvent = new QKeyEvent(QEvent::KeyRelease, Qt::Key_Enter, Qt::NoModifier);
237  QGuiApplication::postEvent(lineEdit, releaseEvent);
238  }
239  else if (key == Qt::Key_Backspace)
240  {
241  QKeyEvent *pressEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
242  QGuiApplication::postEvent(lineEdit, pressEvent);
243 
244  QKeyEvent *releaseEvent = new QKeyEvent(QEvent::KeyRelease, Qt::Key_Backspace, Qt::NoModifier);
245  QGuiApplication::postEvent(lineEdit, releaseEvent);
246  }
247 }
QLineEdit * lineEdit
Definition: Keyboard.h:34

◆ keyboardVisible

bool Keyboard::keyboardVisible ( ) const
slot

Définition à la ligne 157 du fichier Keyboard.cpp.

158 {
159  return QWidget::isVisible();
160 }

◆ keyClicked

void Keyboard::keyClicked ( const QString &  text)
signal

Référencé par buttonClicked(), et Keyboard().

◆ keyToCharacter()

QString Keyboard::keyToCharacter ( int  key)
private

Définition à la ligne 345 du fichier Keyboard.cpp.

Références capsLock, et layoutSize.

Référencé par buttonClicked().

346 {
347  for (int i = 0; i < layoutSize; ++i)
348  {
349  if (keyboardLayout[i].key == key)
350  {
351  if(capsLock)
352  return QString::fromUtf8(keyboardLayout[i].labelCapsLock);
353  else
354  return QString::fromUtf8(keyboardLayout[i].label);
355  }
356  else if (keyboardLayout[i].keyCapsLock == key)
357  return QString::fromUtf8(keyboardLayout[i].labelCapsLock);
358  }
359 
360  return QString();
361 }
bool capsLock
Definition: Keyboard.h:36
KeyboardLayoutEntry keyboardLayout[]
Definition: Keyboard.cpp:26
static const int layoutSize
Definition: Keyboard.cpp:85

◆ makeCapsLock()

void Keyboard::makeCapsLock ( )
private

Définition à la ligne 317 du fichier Keyboard.cpp.

Références capsLock, gridLayout, layoutSize, mapper, et NEXT_ROW_MARKER.

Référencé par buttonClicked().

318 {
319  int row = 0;
320  int column = 0;
321  for (int i = 0; i < layoutSize; ++i)
322  {
323  if (keyboardLayout[i].key == NEXT_ROW_MARKER)
324  {
325  row++;
326  column = 0;
327  continue;
328  }
329 
330  QPushButton *button = dynamic_cast<QPushButton*>(gridLayout->itemAtPosition(row, column)->widget());
331  if(capsLock)
332  {
333  mapper->setMapping(button, keyboardLayout[i].keyCapsLock);
334  button->setText(QString::fromUtf8(keyboardLayout[i].labelCapsLock));
335  }
336  else
337  {
338  mapper->setMapping(button, keyboardLayout[i].key);
339  button->setText(QString::fromUtf8(keyboardLayout[i].label));
340  }
341  column++;
342  }
343 }
QSignalMapper * mapper
Definition: Keyboard.h:33
bool capsLock
Definition: Keyboard.h:36
QGridLayout * gridLayout
Definition: Keyboard.h:31
#define NEXT_ROW_MARKER
Definition: Keyboard.cpp:16
KeyboardLayoutEntry keyboardLayout[]
Definition: Keyboard.cpp:26
static const int layoutSize
Definition: Keyboard.cpp:85

◆ paintEvent()

void Keyboard::paintEvent ( QPaintEvent *  e)
protected

Définition à la ligne 113 du fichier Keyboard.cpp.

114 {
115  QPainter painter(this);
116  QPen pen;
117  pen.setBrush(QBrush(QColor(128, 128, 128, 64)));
118  painter.setPen(pen);
119  painter.drawRoundedRect(0,0,width()-1, height()-1,5,5);
120  QWidget::paintEvent(e);
121 }

◆ setLineEdit()

void Keyboard::setLineEdit ( QLineEdit *  lineEdit)

Définition à la ligne 123 du fichier Keyboard.cpp.

Références capsLock, lineEdit, et mask.

Référencé par Ihm::allerFenetreIdentifiant(), Ihm::allerFenetreMenu(), Ihm::connecterClavier1(), et Ihm::connecterClavier2().

124 {
125  if(lineEdit && this->lineEdit != lineEdit)
126  {
127 #ifdef DEBUG_KEYBOARD
128  qDebug() << Q_FUNC_INFO << this << lineEdit;
129 #endif
130  this->lineEdit = lineEdit;
131  capsLock = false;
132  mask = false;
133  }
134 }
bool capsLock
Definition: Keyboard.h:36
QLineEdit * lineEdit
Definition: Keyboard.h:34
bool mask
Definition: Keyboard.h:37

◆ showKeyboard

void Keyboard::showKeyboard ( int  globalX,
int  globalY 
)
slot

Définition à la ligne 136 du fichier Keyboard.cpp.

Références gridLayout, hBoxLayout, mask, et stackedWidget.

Référencé par focusChange().

137 {
138  QWidget::move(globalX, globalY);
139  if(mask)
140  {
141  setFixedSize(hBoxLayout->sizeHint());
142  stackedWidget->setCurrentIndex(1);
143  }
144  else
145  {
146  setFixedSize(gridLayout->sizeHint());
147  stackedWidget->setCurrentIndex(0);
148  }
149  QWidget::show();
150 }
QGridLayout * gridLayout
Definition: Keyboard.h:31
QStackedWidget * stackedWidget
Definition: Keyboard.h:30
QHBoxLayout * hBoxLayout
Definition: Keyboard.h:32
bool mask
Definition: Keyboard.h:37

◆ specialKeyClicked

void Keyboard::specialKeyClicked ( int  key)
signal

Référencé par buttonClicked(), et Keyboard().

Documentation des données membres

◆ buttonEsc

QPushButton* Keyboard::buttonEsc
private

Définition à la ligne 35 du fichier Keyboard.h.

Référencé par init().

◆ capsLock

bool Keyboard::capsLock
private

Définition à la ligne 36 du fichier Keyboard.h.

Référencé par buttonClicked(), keyToCharacter(), makeCapsLock(), et setLineEdit().

◆ gridLayout

QGridLayout* Keyboard::gridLayout
private

Définition à la ligne 31 du fichier Keyboard.h.

Référencé par buttonClicked(), init(), makeCapsLock(), et showKeyboard().

◆ hBoxLayout

QHBoxLayout* Keyboard::hBoxLayout
private

Définition à la ligne 32 du fichier Keyboard.h.

Référencé par buttonClicked(), init(), et showKeyboard().

◆ instance

Keyboard * Keyboard::instance = Q_NULLPTR
staticprivate

Définition à la ligne 28 du fichier Keyboard.h.

◆ lineEdit

QLineEdit* Keyboard::lineEdit
private

◆ mapper

QSignalMapper* Keyboard::mapper
private

Définition à la ligne 33 du fichier Keyboard.h.

Référencé par init(), et makeCapsLock().

◆ mask

bool Keyboard::mask
private

Définition à la ligne 37 du fichier Keyboard.h.

Référencé par buttonClicked(), setLineEdit(), et showKeyboard().

◆ stackedWidget

QStackedWidget* Keyboard::stackedWidget
private

Définition à la ligne 30 du fichier Keyboard.h.

Référencé par buttonClicked(), init(), et showKeyboard().


La documentation de cette classe a été générée à partir des fichiers suivants :