Как отметить весь текст, дважды щелкнув QDoubleSpinBox? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть класс, который наследуется от QDoubleSpinBox.

 class NumericEdit : public QDoubleSpinBox
 {      
 public:
   NumericEdit( QWidget *p_parent = nullptr );

 protected:
   bool event( QEvent *p_event ) override;
   void keyPressEvent( QKeyEvent *p_event ) override;
   void keyReleaseEvent( QKeyEvent *p_event ) override;
   void focusInEvent( QFocusEvent *p_event ) override;
   void focusOutEvent( QFocusEvent *p_event ) override;
   ............
 };

 NumericEdit::NumericEdit( QWidget *p_parent ) : QDoubleSpinBox( p_parent )
 {
   initStyleSheet();
   setButtonSymbols( QAbstractSpinBox::NoButtons );
   setGroupSeparatorShown( true );
   ..........
 }

Результат, когда я дважды щелкаю в поле редактирования, выглядит следующим образом, помечается только часть между разделителями групп. Если я сделаю тройной щелчок, весь текст будет помечен.

enter image description here

Как мне изменить, чтобы при двойном щелчке в поле редактирования (независимо от того, является ли он целой или десятичной частью), весь текст помечается?

enter image description here

1 Ответ

2 голосов
/ 04 июня 2019

Решение заключается в переопределении метода QLineEdit::mouseDoubleClickEvent (не QDoubleSpinBox::mouseDoubleClickEvent).

Редактирование пользовательской строки:

class ExtendedLineEdit : public QLineEdit
{
    Q_OBJECT
public:
    explicit ExtendedLineEdit(QWidget *parent = nullptr);
protected:
    void mouseDoubleClickEvent(QMouseEvent *event);
}

void ExtendedLineEdit::mouseDoubleClickEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        selectAll();
        event->accept();
        return;
    }

    QLineEdit::mouseDoubleClickEvent(event);
}

И затем установите его в свой пользовательский блок прокрутки

NumericEdit::NumericEdit(QWidget *p_parent) : QDoubleSpinBox(p_parent)
{
    //...
    ExtendedLineEdit* lineEdit = new ExtendedLineEdit(this);
    setLineEdit(lineEdit);
}
...