Pārlūkot izejas kodu

设置 echo mode 和图标
QFluentWidgets 有改动,需要重新编译

chengxr 1 gadu atpakaļ
vecāks
revīzija
c65cdfc45a

+ 0 - 1
QFD/widgets/LoginWidget.cpp

@@ -38,7 +38,6 @@ void LoginWidget::initialize()
     m_pwLineEdit = new PasswordLineEdit(this);
     m_pwLineEdit->setPlaceholderText("请输入密码");
     m_pwLineEdit->setFixedWidth(250);
-    m_pwLineEdit->setEchoMode(QLineEdit::Password);
 
     m_remLayout   = new QHBoxLayout();
     m_remCheckBox = new CheckBox("记住密码", this);

+ 22 - 1
QFluentWidgets/Widgets/LineEdit.cpp

@@ -18,6 +18,25 @@ LineEditButton::LineEditButton(FluentIconBase *ficon, QWidget *parent) : QToolBu
     FluentStyleSheet::apply("LINE_EDIT", this);
 }
 
+void LineEditButton::setIcon(FluentIconBase *ficon)
+{
+    m_ficon.reset(ficon);
+    update();
+}
+
+FluentIconBase *LineEditButton::ficon() const
+{
+    return m_ficon.data();
+}
+
+QIcon LineEditButton::icon() const
+{
+    if (!m_ficon) {
+        return QIcon();
+    }
+    return m_ficon->icon();
+}
+
 void LineEditButton::paintEvent(QPaintEvent *event)
 {
     QToolButton::paintEvent(event);
@@ -162,11 +181,12 @@ void SearchLineEdit::search()
 
 PasswordLineEdit::PasswordLineEdit(QWidget *parent) : LineEdit(parent)
 {
-    m_echoButton         = new LineEditButton(NEWFLICON(FluentIcon, VIEW), this);
+    m_echoButton         = new LineEditButton(NEWFLICON(FluentIcon, HIDE), this);
     QHBoxLayout *hLayout = hBoxLayout();
     hLayout->addWidget(m_echoButton, 0, Qt::AlignRight);
     setIsClearButtonEnabled(true);
     setTextMargins(0, 0, 59, 0);
+    setEchoMode(QLineEdit::Password);
 
     connect(m_echoButton, &LineEditButton::clicked, this, &PasswordLineEdit::switchEchoMode);
     connect(clearButton(), &LineEditButton::clicked, this, &PasswordLineEdit::clearSignal);
@@ -175,6 +195,7 @@ PasswordLineEdit::PasswordLineEdit(QWidget *parent) : LineEdit(parent)
 void PasswordLineEdit::switchEchoMode()
 {
     setEchoMode(echoMode() == QLineEdit::Normal ? QLineEdit::Password : QLineEdit::Normal);
+    m_echoButton->setIcon(echoMode() == QLineEdit::Normal ? NEWFLICON(FluentIcon, VIEW) : NEWFLICON(FluentIcon, HIDE));
     emit echoModeChanged();
 }
 

+ 4 - 0
QFluentWidgets/Widgets/LineEdit.h

@@ -16,6 +16,10 @@ class LineEditButton : public QToolButton
 public:
     LineEditButton(FluentIconBase *ficon, QWidget *parent = nullptr);
 
+    void setIcon(FluentIconBase *ficon);
+    FluentIconBase *ficon() const;
+    QIcon icon() const;
+
     // QWidget interface
 protected:
     void paintEvent(QPaintEvent *event) override;