chengxr 1 rok pred
rodič
commit
736a433571

+ 44 - 6
QFD/widgets/ProjectListWidget.cpp

@@ -15,10 +15,11 @@
 
 #include <QDebug>
 
-ProjectListItemWidget::ProjectListItemWidget(QWidget *parent) : QWidget(parent)
+ProjectListItemWidget::ProjectListItemWidget(int index, QWidget *parent) : QWidget(parent), m_index(index)
 {
     initWidgets();
     initLayout();
+    connectSignalsAndSlots();
 }
 
 void ProjectListItemWidget::initWidgets()
@@ -94,7 +95,13 @@ void ProjectListItemWidget::initLayout()
     m_buttonLayout->addWidget(m_edit);
 }
 
-void ProjectListItemWidget::setData(ProjectInfo *info)
+void ProjectListItemWidget::connectSignalsAndSlots()
+{
+    connect(m_open, &PushButton::clicked, this, &ProjectListItemWidget::sigOpen);
+    connect(m_edit, &PushButton::clicked, this, &ProjectListItemWidget::sigEdit);
+}
+
+void ProjectListItemWidget::setInfo(ProjectInfo *info)
 {
     m_info = info;
     if (info == nullptr) {
@@ -119,6 +126,16 @@ void ProjectListItemWidget::setData(ProjectInfo *info)
     m_type->setText(tStr);
 }
 
+int ProjectListItemWidget::index() const
+{
+    return m_index;
+}
+
+ProjectInfo *ProjectListItemWidget::info() const
+{
+    return m_info;
+}
+
 ProjectListWidget::ProjectListWidget(QWidget *parent) : QWidget(parent)
 {
     initWidgets();
@@ -130,9 +147,11 @@ void ProjectListWidget::showProjects(QList<ProjectInfo *> list)
 {
     m_listWidget->clear();
 
-    for (ProjectInfo *info : list) {
-        ProjectListItemWidget *w = new ProjectListItemWidget(m_listWidget);
-        w->setData(info);
+    for (int i = 0; i < list.count(); i++) {
+        ProjectListItemWidget *w = new ProjectListItemWidget(i, m_listWidget);
+        w->setInfo(list[i]);
+        connect(w, &ProjectListItemWidget::sigOpen, this, &ProjectListWidget::slotOpen);
+        connect(w, &ProjectListItemWidget::sigEdit, this, &ProjectListWidget::slotEdit);
 
         QListWidgetItem *item = new QListWidgetItem(m_listWidget);
         item->setSizeHint(QSize(300, 135));
@@ -140,6 +159,12 @@ void ProjectListWidget::showProjects(QList<ProjectInfo *> list)
     }
 }
 
+ProjectListItemWidget *ProjectListWidget::itemWidget(QListWidgetItem *item) const
+{
+    QWidget *w = m_listWidget->itemWidget(item);
+    return dynamic_cast<ProjectListItemWidget *>(w);
+}
+
 void ProjectListWidget::initWidgets()
 {
     QPalette pal(palette());
@@ -153,7 +178,7 @@ void ProjectListWidget::initWidgets()
 
     m_listWidget->setAlternatingRowColors(true);
     m_listWidget->setStyleSheet("QListWidget {border: 1px solid rgba(0, 0, 0, 0.073);background: rgb(255, 255, "
-                                "255);alternate-background-color: rgb(244, 244, 255);}");
+                                "255);alternate-background-color: rgb(233, 233, 244);}");
 }
 
 void ProjectListWidget::initLayout()
@@ -195,3 +220,16 @@ void ProjectListWidget::slotItemSelectionChanged()
 {
     qDebug() << __FUNCTION__ << __LINE__;
 }
+
+void ProjectListWidget::slotOpen()
+{
+    ProjectListItemWidget *w = dynamic_cast<ProjectListItemWidget *>(sender());
+    qDebug() << __FUNCTION__ << __LINE__ << w->index() << w->info()->projectName;
+}
+
+void ProjectListWidget::slotEdit()
+{
+    ProjectListItemWidget *w = dynamic_cast<ProjectListItemWidget *>(sender());
+    qDebug() << __FUNCTION__ << __LINE__ << w->index() << w->info()->projectName;
+    ;
+}

+ 20 - 2
QFD/widgets/ProjectListWidget.h

@@ -21,15 +21,24 @@ class ProjectListItemWidget : public QWidget
 {
     Q_OBJECT
 public:
-    explicit ProjectListItemWidget(QWidget *parent = nullptr);
+    explicit ProjectListItemWidget(int index, QWidget *parent = nullptr);
 
-    void setData(ProjectInfo *info);
+    void setInfo(ProjectInfo *info);
+
+    int index() const;
+    ProjectInfo *info() const;
+
+signals:
+    void sigOpen();
+    void sigEdit();
 
 private:
     void initWidgets();
     void initLayout();
+    void connectSignalsAndSlots();
 
 private:
+    int m_index         = 0;
     ProjectInfo *m_info = nullptr;
 
     QLabel *m_name      = nullptr;
@@ -58,6 +67,12 @@ public:
 
     void showProjects(QList<ProjectInfo *> list);
 
+    ProjectListItemWidget *itemWidget(QListWidgetItem *item) const;
+
+signals:
+    void sigOpen(ProjectInfo *project);
+    void sigEdit(ProjectInfo *project);
+
 private:
     void initWidgets();
     void initLayout();
@@ -71,6 +86,9 @@ private slots:
     void slotCurrentRowChanged(int currentRow);
     void slotItemSelectionChanged();
 
+    void slotOpen();
+    void slotEdit();
+
 signals:
 
 private: