Browse Source

ExpertInfoWidget

chengxr 1 year ago
parent
commit
9b499d3687

+ 8 - 5
QFD/view/ExpertManageView.cpp

@@ -19,7 +19,6 @@ ExpertManageView::ExpertManageView(QWidget *parent) : QWidget(parent) { }
 
 void ExpertManageView::showEvent(QShowEvent *event)
 {
-    qDebug() << __FUNCTION__ << __LINE__;
 
     QWidget::showEvent(event);
 
@@ -29,6 +28,9 @@ void ExpertManageView::showEvent(QShowEvent *event)
 void ExpertManageView::hideEvent(QHideEvent *event)
 {
     QWidget::hideEvent(event);
+    if (m_expertInfoWidget && m_expertInfoWidget->isVisible()) {
+        m_expertInfoWidget->close();
+    }
 }
 
 void ExpertManageView::init()
@@ -98,14 +100,15 @@ void ExpertManageView::setListButtonHidden(bool hidden)
     m_deleteButton->setHidden(hidden);
 }
 
-void ExpertManageView::showExpertInfo(int mode)
+void ExpertManageView::showExpertInfo(ExpertInfoWidget::Mode mode)
 {
     if (m_expertInfoWidget == nullptr) {
         m_expertInfoWidget = new ExpertInfoWidget(this);
     }
-    m_expertInfoWidget->setMode(ExpertInfoWidget::Mode(mode));
+
     if (m_expertInfoWidget->isVisible() == false) {
         m_expertInfoWidget->clearInputs();
+        m_expertInfoWidget->setMode(mode);
         m_expertInfoWidget->show();
     }
 }
@@ -117,7 +120,7 @@ void ExpertManageView::slotAddExpertClicked()
 
 void ExpertManageView::slotDetailClicked()
 {
-    showExpertInfo(ExpertInfoWidget::Read);
+    showExpertInfo();
 }
 
 void ExpertManageView::slotDeleteClicked()
@@ -133,5 +136,5 @@ void ExpertManageView::slotListSelectionChanged()
 
 void ExpertManageView::slotListItemDoubleClicked()
 {
-    showExpertInfo(ExpertInfoWidget::Read);
+    showExpertInfo();
 }

+ 3 - 2
QFD/view/ExpertManageView.h

@@ -3,7 +3,8 @@
 
 #include <QWidget>
 
-class ExpertInfoWidget;
+#include "ExpertInfoWidget.h"
+
 class ExpertListWidget;
 
 class PushButton;
@@ -37,7 +38,7 @@ private:
 
     void setListButtonHidden(bool hidden);
 
-    void showExpertInfo(int mode);
+    void showExpertInfo(ExpertInfoWidget::Mode mode = ExpertInfoWidget::Read);
 
 private slots:
     void slotAddExpertClicked();

+ 81 - 23
QFD/widgets/ExpertInfoWidget.cpp

@@ -2,11 +2,14 @@
 
 #include <Widgets/LineEdit.h>
 #include <Widgets/Button.h>
+#include <Widgets/SpinBox.h>
 
 #include <QBoxLayout>
 #include <QGridLayout>
 #include <QLabel>
 
+#include <QDebug>
+
 ExpertInfoWidget::ExpertInfoWidget(QWidget *parent) : QWidget(parent)
 {
     initWindow();
@@ -16,6 +19,17 @@ ExpertInfoWidget::ExpertInfoWidget(QWidget *parent) : QWidget(parent)
     updateState();
 }
 
+void ExpertInfoWidget::showEvent(QShowEvent *event)
+{
+    QWidget::showEvent(event);
+    clearFocus();
+}
+
+void ExpertInfoWidget::hideEvent(QHideEvent *event)
+{
+    QWidget::hideEvent(event);
+}
+
 void ExpertInfoWidget::setMode(ExpertInfoWidget::Mode mode)
 {
     m_mode = mode;
@@ -31,60 +45,71 @@ void ExpertInfoWidget::clearInputs()
     m_jobLineEdit->clear();
     m_majorLineEdit->clear();
     m_contactInfoLineEdit->clear();
+    m_timeLineEdit->clear();
     m_noteTextEdit->clear();
-    updateState();
 }
 
 void ExpertInfoWidget::initWindow()
 {
+    setMaximumWidth(400);
     setWindowFlags(Qt::Window);
     setWindowFlag(Qt::WindowMinMaxButtonsHint, false);
-    //    setModal(true);
-    //    setWindowFlags(Qt::Dialog);
-    //    setWindowFlag(Qt::WindowContextHelpButtonHint, false);
-    resize(400, 450);
 }
 
 void ExpertInfoWidget::initialize()
 {
-    int editWidth = 300;
+    int labelHeight = 35;
+    int editWidth   = 300;
 
     m_vBoxLayout = new QVBoxLayout(this);
     m_gridLayout = new QGridLayout();
 
     m_idLabel = new QLabel(this);
     m_idLabel->setText("账号ID:");
+    m_idLabel->setFixedHeight(labelHeight);
     m_idLineEdit = new LineEdit(this);
     m_idLineEdit->setFixedWidth(editWidth);
     m_idLineEdit->setPlaceholderText("请输入a-z/A-Z/0-9数字字母组合");
     m_passwordLabel = new QLabel(this);
     m_passwordLabel->setText("用户密码:");
+    m_passwordLabel->setFixedHeight(labelHeight);
     m_passwordLineEdit = new PasswordLineEdit(this);
     m_passwordLineEdit->setFixedWidth(editWidth);
     m_passwordLineEdit->setPlaceholderText("请输入密码");
     m_nameLabel = new QLabel(this);
     m_nameLabel->setText("专家名:");
+    m_nameLabel->setFixedHeight(labelHeight);
     m_nameLineEdit = new LineEdit(this);
     m_nameLineEdit->setFixedWidth(editWidth);
     m_nameLineEdit->setPlaceholderText("请输入专家名");
     m_companyLabel = new QLabel(this);
     m_companyLabel->setText("单位:");
+    m_companyLabel->setFixedHeight(labelHeight);
     m_companyLineEdit = new LineEdit(this);
     m_companyLineEdit->setFixedWidth(editWidth);
     m_jobLabel = new QLabel(this);
     m_jobLabel->setText("职务:");
+    m_jobLabel->setFixedHeight(labelHeight);
     m_jobLineEdit = new LineEdit(this);
     m_jobLineEdit->setFixedWidth(editWidth);
     m_majorLabel = new QLabel(this);
     m_majorLabel->setText("专业:");
+    m_majorLabel->setFixedHeight(labelHeight);
     m_majorLineEdit = new LineEdit(this);
     m_majorLineEdit->setFixedWidth(editWidth);
     m_contactInfoLabel = new QLabel(this);
     m_contactInfoLabel->setText("联系方式:");
+    m_contactInfoLabel->setFixedHeight(labelHeight);
     m_contactInfoLineEdit = new LineEdit(this);
     m_contactInfoLineEdit->setFixedWidth(editWidth);
+    m_timeLabel = new QLabel(this);
+    m_timeLabel->setText("填写时间:");
+    m_timeLabel->setFixedHeight(labelHeight);
+    m_timeLineEdit = new DateTimeEdit(this);
+    m_timeLineEdit->setFixedWidth(editWidth);
     m_noteLabel = new QLabel(this);
     m_noteLabel->setText("备注:");
+    m_noteLabel->setFixedHeight(labelHeight);
     m_noteTextEdit = new TextEdit(this);
     m_noteTextEdit->setFixedWidth(editWidth);
     m_noteTextEdit->setFixedHeight(100);
@@ -113,8 +138,10 @@ void ExpertInfoWidget::initLayout()
     m_gridLayout->addWidget(m_majorLineEdit, 5, 1, 1, 1, Qt::AlignLeft);
     m_gridLayout->addWidget(m_contactInfoLabel, 6, 0, 1, 1, Qt::AlignRight);
     m_gridLayout->addWidget(m_contactInfoLineEdit, 6, 1, 1, 1, Qt::AlignLeft);
-    m_gridLayout->addWidget(m_noteLabel, 7, 0, 1, 1, Qt::AlignRight | Qt::AlignTop);
-    m_gridLayout->addWidget(m_noteTextEdit, 7, 1, 1, 1, Qt::AlignLeft);
+    m_gridLayout->addWidget(m_timeLabel, 7, 0, 1, 1, Qt::AlignRight);
+    m_gridLayout->addWidget(m_timeLineEdit, 7, 1, 1, 1, Qt::AlignLeft);
+    m_gridLayout->addWidget(m_noteLabel, 8, 0, 1, 1, Qt::AlignRight | Qt::AlignTop);
+    m_gridLayout->addWidget(m_noteTextEdit, 8, 1, 1, 1, Qt::AlignLeft);
 
     m_vBoxLayout->addStretch();
     m_vBoxLayout->addLayout(m_hBoxLayout);
@@ -132,31 +159,62 @@ void ExpertInfoWidget::connectSignalsAndSlots()
 
 void ExpertInfoWidget::updateState()
 {
+    int h     = height();
+    QString t = windowTitle();
     switch (m_mode) {
     case Add: {
-        setWindowTitle("添加用户");
+        t = "添加用户";
+        h = 300;
         break;
     }
     case Update: {
-        setWindowTitle("修改用户信息");
+        t = "修改用户信息";
+        h = 300;
+        break;
     }
     case Read: {
-        setWindowTitle("用户信息");
+        t = "用户信息";
+        h = 450;
+        break;
     }
     }
 
-    bool editEnabled = m_mode != Read;
-    m_idLineEdit->setEnabled(editEnabled);
-    m_passwordLineEdit->setEnabled(editEnabled);
-    m_nameLineEdit->setEnabled(editEnabled);
-    m_companyLineEdit->setEnabled(editEnabled);
-    m_jobLineEdit->setEnabled(editEnabled);
-    m_majorLineEdit->setEnabled(editEnabled);
-    m_idLineEdit->setEnabled(editEnabled);
-    m_contactInfoLineEdit->setEnabled(editEnabled);
-    m_noteTextEdit->setEnabled(editEnabled);
-    m_confirmButton->setHidden(!editEnabled);
-    m_cancelButton->setHidden(!editEnabled);
+    setMaximumHeight(h);
+    setWindowTitle(t);
+
+    setEditable(m_mode != Read);
+    setDetailsHideen(m_mode == Add);
+
+    //    update();
+    repaint();
+}
+
+void ExpertInfoWidget::setDetailsHideen(bool hidden)
+{
+    m_companyLabel->setHidden(hidden);
+    m_companyLineEdit->setHidden(hidden);
+    m_jobLabel->setHidden(hidden);
+    m_jobLineEdit->setHidden(hidden);
+    m_majorLabel->setHidden(hidden);
+    m_majorLineEdit->setHidden(hidden);
+    m_contactInfoLabel->setHidden(hidden);
+    m_contactInfoLineEdit->setHidden(hidden);
+}
+
+void ExpertInfoWidget::setEditable(bool editable)
+{
+    m_idLineEdit->setReadOnly(!editable);
+    m_passwordLineEdit->setReadOnly(!editable);
+    m_nameLineEdit->setReadOnly(!editable);
+    m_companyLineEdit->setReadOnly(!editable);
+    m_jobLineEdit->setReadOnly(!editable);
+    m_majorLineEdit->setReadOnly(!editable);
+    m_idLineEdit->setReadOnly(!editable);
+    m_contactInfoLineEdit->setReadOnly(!editable);
+    m_timeLineEdit->setReadOnly(!editable);
+    m_noteTextEdit->setReadOnly(!editable);
+    m_confirmButton->setHidden(!editable);
+    m_cancelButton->setHidden(!editable);
 }
 
 void ExpertInfoWidget::slotConfirm()

+ 10 - 0
QFD/widgets/ExpertInfoWidget.h

@@ -7,6 +7,7 @@ class LineEdit;
 class PasswordLineEdit;
 class PushButton;
 class TextEdit;
+class DateTimeEdit;
 
 class QVBoxLayout;
 class QHBoxLayout;
@@ -31,6 +32,9 @@ public:
 
     explicit ExpertInfoWidget(QWidget *parent = nullptr);
 
+    void showEvent(QShowEvent *event) override;
+    void hideEvent(QHideEvent *event) override;
+
     void setMode(Mode mode);
 
     void clearInputs();
@@ -42,6 +46,9 @@ private:
     void connectSignalsAndSlots();
     void updateState();
 
+    void setDetailsHideen(bool hidden);
+    void setEditable(bool editable);
+
 private slots:
     void slotConfirm();
     void slotCancel();
@@ -76,6 +83,9 @@ private:
     QLabel *m_contactInfoLabel      = nullptr;
     LineEdit *m_contactInfoLineEdit = nullptr;
 
+    QLabel *m_timeLabel          = nullptr;
+    DateTimeEdit *m_timeLineEdit = nullptr;
+
     QLabel *m_noteLabel      = nullptr;
     TextEdit *m_noteTextEdit = nullptr;
 

+ 1 - 1
QFluentWidgets/Widgets/SpinBox.h

@@ -22,7 +22,7 @@ public:
     //    const QString DOWN     = "DOWN";
     static QString iconName(IconType type);
 
-    SpinIcon(IconType type, Qfw::Theme t = Qfw::DARK);
+    SpinIcon(IconType type, Qfw::Theme t = Qfw::LIGHT);
     ~SpinIcon();
 
     QString iconPath();