首页 > 解决方案 > 如何为 QLineEdit 添加 2 个自定义按钮?

问题描述

我试图为我的行编辑添加两个按钮。仅当行编辑中的文本不为空时才会出现“清除”,并且始终显示“灯泡”。

MyLineEdit.cpp

MyLineEdit::MyLineEdit( QWidget *p_parent ) : QLineEdit( p_parent )
{
  m_buttonAction = addAction( QIcon( ":/bulb" ), QLineEdit::TrailingPosition );
  QToolButton *button = dynamic_cast<QToolButton *>( m_buttonAction->associatedWidgets().at( 1 ) );
  button->setCursor( QCursor( Qt::PointingHandCursor ) );
  m_buttonAction->setVisible( true );

  m_clearAction = addAction( QIcon( ":/clear" ), QLineEdit::TrailingPosition );
  QToolButton *clear = dynamic_cast<QToolButton *>( m_clearAction->associatedWidgets().at( 1 ) );
  clear->setCursor( QCursor( Qt::PointingHandCursor ) );
  m_clearAction->setVisible( false );

  connect( this, &MyLineEdit::textChanged, this, &MyLineEdit::toggleClearButton );
  connect( m_clearAction, &QAction::triggered, this, &QLineEdit::clear );
  connect(m_buttonAction, &QAction::triggered, this, &MyLineEdit::doSomething);
}

void MyLineEdit::toggleClearButton()
{
  text().isEmpty() ? m_clearAction->setVisible( false ) : m_clearAction->setVisible( true );
}

void MyLineEdit::doSomething()
{
}

MyLineEdit.h

 class MyLineEdit : public QLineEdit
 {
  Q_OBJECT
  public:
      MyLineEdit( QWidget *p_parent = nullptr );

  private slots:
      void toggleClearButton();
      void doSomething();

  private:
      QAction *m_clearAction = nullptr;
      QAction *m_buttonAction = nullptr;
 };

当我运行程序时,“灯泡”没有出现在开头 在此处输入图像描述

只有当我在行编辑中输入内容时,“灯泡”才会按我的意愿显示 在此处输入图像描述

为什么开头没有显示“灯泡”,我这里哪里出错了?

标签: qtqlineeditqactionqtoolbutton

解决方案


推荐阅读