如何通过双击QDoubleSpinBox标记整个文本?

时间:2019-06-04 07:30:18

标签: c++ qt qdoublespinbox

我有一个继承自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 个答案:

答案 0 :(得分:2)

解决方案是重新实现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);
}