Как получить глобальную координату мыши вне приложения в Qt? - PullRequest
0 голосов
/ 02 ноября 2018

Я создаю новый элемент, который унаследован от QWidget и представляет собой комбинацию LineEdit и Button.

enter image description here

Теперь, когда я нажимаю на кнопку, должен отображаться список (или, другими словами, должен отображаться завершитель).

enter image description here

Теперь требуется, , когда я щелкаю мышью вне завершителя, завершитель будет закрыт . Поэтому мне нужно знать глобальную координату мыши , чтобы проверить, находится ли мышь внутри завершителя или нет. Как я могу это сделать?

LineEditWithButton.h

class LineEditWithButton : public QWidget
{
  Q_OBJECT
public:
  LineEditWithButton( QWidget *p_parent = nullptr );      
  void showCompleter(); /* This function shows the Completer */
  .............

protected:
  void keyPressEvent( QKeyEvent *p_event ) override;
  void mousePressEvent( QMouseEvent *p_event ) override;
  .........

private slots:      
  void toggleCompleter(); /* slot to hide/show the completer */      
  void lineEditChanged(); /* slot when text in the LineEdit changes */
  .............

private:      
  MyButton *m_button = nullptr; /* This variable holds the Button beside the LineEdit */      
  MyLineEdit *m_lineEdit = nullptr; /* This variable holds the LineEdit */      
  MyCompleter *m_completer = nullptr; /* This variable holds the Completer */
  .........
};

LineEditWithButton.cpp

void LineEditWithButton::mousePressEvent( QMouseEvent *p_event )
{
  QPoint globalPosition = p_event->globalPos();
  QRect compRect = m_completer->geometry();
  if ( !compRect.contains( globalPosition ) && m_completer->isVisible() )
  {
     m_completer->hide();
  }
}

Эта функция не работает для меня. Я установил точку останова в этой функции, но точка останова не будет достигнута. Как я могу решить мою проблему?

...