chengxr 1 год назад
Родитель
Сommit
fa9aaaeff1

+ 21 - 0
QFD/view/HomeView.cpp

@@ -88,6 +88,8 @@ void HomeView::connectSignalsAndSlots()
     connect(m_create, &PushButton::clicked, this, &HomeView::slotCreateProjClicked);
     connect(m_search, &LineEdit::textChanged, this, &HomeView::slotSearchTextChanged);
     connect(m_createProjWidget, &CreateProjWidget::signalCreate, this, &HomeView::slotConfirmCreate);
+    connect(m_projListWidget, &ProjectListWidget::sigOpen, this, &HomeView::slotOpenProject);
+    connect(m_projListWidget, &ProjectListWidget::sigEdit, this, &HomeView::slotEditProject);
 }
 
 void HomeView::loadProjects()
@@ -118,6 +120,7 @@ QList<ProjectInfo *> HomeView::searchResult() const
 void HomeView::slotCreateProjClicked()
 {
     if (m_createProjWidget->isVisible() == false) {
+        m_createProjWidget->setMode(CreateProjWidget::Create);
         m_createProjWidget->resetInputs();
         m_createProjWidget->show();
     }
@@ -139,3 +142,21 @@ void HomeView::slotConfirmCreate()
         loadProjects();
     }
 }
+
+void HomeView::slotOpenProject(ProjectInfo *proj)
+{
+    if (m_createProjWidget->isVisible() == false) {
+        m_createProjWidget->setMode(CreateProjWidget::Info);
+        m_createProjWidget->setProjectInfo(proj);
+        m_createProjWidget->show();
+    }
+}
+
+void HomeView::slotEditProject(ProjectInfo *proj)
+{
+    if (m_createProjWidget->isVisible() == false) {
+        m_createProjWidget->setMode(CreateProjWidget::Update);
+        m_createProjWidget->setProjectInfo(proj);
+        m_createProjWidget->show();
+    }
+}

+ 2 - 0
QFD/view/HomeView.h

@@ -40,6 +40,8 @@ private slots:
     void slotCreateProjClicked();
     void slotSearchTextChanged();
     void slotConfirmCreate();
+    void slotOpenProject(ProjectInfo *proj);
+    void slotEditProject(ProjectInfo *proj);
 
 private:
     bool m_initilized = false;

+ 62 - 0
QFD/widgets/CreateProjWidget.cpp

@@ -23,6 +23,50 @@ CreateProjWidget::CreateProjWidget(QWidget *parent) : QDialog(parent)
     connectSignalsAndSlots();
 }
 
+CreateProjWidget::Mode CreateProjWidget::mode() const
+{
+    return m_mode;
+}
+
+void CreateProjWidget::setMode(CreateProjWidget::Mode mode)
+{
+    m_mode = mode;
+    switch (mode) {
+    case Create: {
+        setWindowTitle("创建项目");
+        m_confirm->setText("创建");
+        break;
+    }
+    case Update: {
+        setWindowTitle("修改项目");
+        m_confirm->setText("修改");
+        break;
+    }
+    case Info: {
+        setWindowTitle("项目信息");
+        break;
+    }
+    }
+
+    bool c  = (mode == Create);
+    bool cu = (mode == Update || mode == Create);
+
+    m_taskName->setEnabled(cu);
+    m_evalTime->setEnabled(c);
+    m_evalPurpose->setEnabled(cu);
+    m_evalUnit->setEnabled(cu);
+    m_evalCrew->setEnabled(cu);
+    m_rank->setEnabled(cu);
+    m_note->setEnabled(cu);
+    m_name->setEnabled(cu);
+    m_type1->setEnabled(c);
+    m_type2->setEnabled(c);
+    m_type3->setEnabled(c);
+
+    m_confirm->setVisible(cu);
+    m_cancel->setVisible(cu);
+}
+
 void CreateProjWidget::resetInputs()
 {
     m_taskName->clear();
@@ -63,6 +107,23 @@ ProjectInfo CreateProjWidget::projectInfo() const
     return proj;
 }
 
+void CreateProjWidget::setProjectInfo(ProjectInfo *info)
+{
+    m_taskName->setText(info->taskName);
+    QDateTime time = QDateTime::fromTime_t(info->estimateTime.toUInt());
+    m_evalTime->setDateTime(time);
+    m_evalPurpose->setText(info->estimateObjective);
+    m_evalUnit->setText(info->estimateDept);
+    m_evalCrew->setText(info->estimatePerson);
+    m_rank->setText(info->positionalTitles);
+    m_note->setPlainText(info->remark);
+    m_name->setText(info->projectName);
+    ProjectManager::EvalTypes types = ProjectManager::evalTypes(*info);
+    m_type1->setChecked((types & ProjectManager::Requirements) == ProjectManager::Requirements);
+    m_type1->setChecked((types & ProjectManager::SchemeOptimization) == ProjectManager::SchemeOptimization);
+    m_type1->setChecked((types & ProjectManager::OverallEfficiency) == ProjectManager::OverallEfficiency);
+}
+
 void CreateProjWidget::initWindow()
 {
     setWindowTitle("新建工程");
@@ -137,6 +198,7 @@ void CreateProjWidget::initLayout()
     // 项目信息布局
     m_projLayout->addWidget(m_nameLabel, 0, 0, 1, 1, Qt::AlignLeft);
     m_projLayout->addWidget(m_name, 0, 1, 1, 5, Qt::AlignLeft);
+    m_name->setMinimumWidth(200);
     m_projLayout->addWidget(new QWidget(this), 1, 1, 4, 1, Qt::AlignLeft);
     m_projLayout->addWidget(m_typeLabel, 4, 0, 1, 1, Qt::AlignLeft);
     m_projLayout->addWidget(m_type1, 4, 1, 1, 5, Qt::AlignLeft);

+ 13 - 0
QFD/widgets/CreateProjWidget.h

@@ -21,11 +21,22 @@ class CreateProjWidget : public QDialog
 {
     Q_OBJECT
 public:
+    typedef enum
+    {
+        Create,  // 创建
+        Update,  // 编辑
+        Info,    // 查看
+    } Mode;
+
     CreateProjWidget(QWidget *parent = nullptr);
 
+    Mode mode() const;
+    void setMode(Mode mode);
+
     void resetInputs();
 
     ProjectInfo projectInfo() const;
+    void setProjectInfo(ProjectInfo *info);
 
 signals:
     void signalCreate();
@@ -44,6 +55,8 @@ private slots:
     void slotCancelClicked();
 
 private:
+    Mode m_mode = Create;
+
     // 项目概要
     QLabel *m_summary        = nullptr;  // 项目概要
     LineEdit *m_taskName     = nullptr;  // 任务名称

+ 2 - 3
QFD/widgets/ProjectListWidget.cpp

@@ -224,12 +224,11 @@ void ProjectListWidget::slotItemSelectionChanged()
 void ProjectListWidget::slotOpen()
 {
     ProjectListItemWidget *w = dynamic_cast<ProjectListItemWidget *>(sender());
-    qDebug() << __FUNCTION__ << __LINE__ << w->index() << w->info()->projectName;
+    emit sigOpen(w->info());
 }
 
 void ProjectListWidget::slotEdit()
 {
     ProjectListItemWidget *w = dynamic_cast<ProjectListItemWidget *>(sender());
-    qDebug() << __FUNCTION__ << __LINE__ << w->index() << w->info()->projectName;
-    ;
+    emit sigEdit(w->info());
 }