QComboBox с щелчком на lineEdit - PullRequest
       0

QComboBox с щелчком на lineEdit

0 голосов
/ 20 января 2020

I sh производный класс от QComboBox со следующей дополнительной функцией:

Когда пользователь щелкает QLiineEdit этого поля со списком, эффект должен быть таким же, как щелчок со стрелкой в ​​правой части поля со списком. box (метод showPopup ()).

Моя попытка:

Файл lineedit.h

#ifndef LINEEDIT_H
#define LINEEDIT_H

#include <QLineEdit>

class LineEdit : public QLineEdit {
  Q_OBJECT

public:
  LineEdit(QWidget *parent = nullptr);

signals:
  void pressed();

protected:
  void mousePressEvent(QMouseEvent *event) override;
};

#endif // LINEEDIT_H

Файл lineedit. cpp

#include "lineedit.h"
#include <QMouseEvent>

LineEdit::LineEdit(QWidget *parent) : QLineEdit(parent) {}

void LineEdit::mousePressEvent(QMouseEvent *event) {
  QLineEdit::mousePressEvent(event);
  emit pressed();
  event->accept();
}

Файл combobox.h

#ifndef COMBOBOX_H
#define COMBOBOX_H

#include <QComboBox>

class ComboBox : public QComboBox {
  Q_OBJECT

public:
  ComboBox(QWidget *parent = nullptr);

private slots:
  void lineEditPressed();
};

#endif // COMBOBOX_H

Файл комбобокс. cpp

#include "combobox.h"
#include "lineedit.h"

ComboBox::ComboBox(QWidget *parent) : QComboBox(parent) {
  setLineEdit(new LineEdit);
  connect(lineEdit(), SIGNAL(pressed()), this, SLOT(lineEditPressed()));
}

void ComboBox::lineEditPressed() { showPopup(); }

Но, когда я нажимаю lineEdit, он показывает всплывающее окно, но после отпускания кнопки мыши он исчезает.

1 Ответ

0 голосов
/ 20 января 2020

Пожалуйста, пересмотрите документацию обработчика событий. Когда вы показываете всплывающее меню в этой функции, то событие выпуска будет конфликтовать поспешно. Я не могу предсказать вашу реализацию showPopup(), но, пожалуйста, не создавайте всплывающее меню внутри него. Вы можете показать, скрыть, назначить, но НИКОГДА создать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...