#include "ProjectListWidget.h" #include "QFDIcon.h" #include "ProjectManager.h" #include "dbService/ClassSet.h" #include #include #include #include #include #include #include #include ProjectListItemWidget::ProjectListItemWidget(int index, QWidget *parent) : QWidget(parent), m_index(index) { initWidgets(); initLayout(); connectSignalsAndSlots(); } void ProjectListItemWidget::initWidgets() { m_name = new QLabel(this); m_name->setObjectName("name"); m_time = new QLabel(this); m_time->setObjectName("time"); m_taskLabel = new QLabel(this); m_taskLabel->setObjectName("taskLabel"); m_taskLabel->setText("任务名称:"); m_task = new QLabel(this); m_task->setObjectName("task"); m_typeLabel = new QLabel(this); m_typeLabel->setObjectName("typeLabel"); m_typeLabel->setText("评估类型:"); m_type = new QLabel(this); m_type->setObjectName("type"); m_open = new PushButton("打开", NEWFLICON(QFDIcon, Open), this); m_open->setObjectName("open"); m_edit = new PushButton("编辑", NEWFLICON(FluentIcon, EDIT), this); m_edit->setObjectName("edit"); setStyleSheet("#name {color:#1196db; font-size:15px; font:bold}" "#time {color:gray}" "#taskLabel {color: gray;}" "#task {color: gray;}" "#typeLabel {color: gray;}" "#type {color: gray;}"); } void ProjectListItemWidget::initLayout() { // 总体布局 m_layout = new QVBoxLayout(this); m_layout->setMargin(10); m_nameLayout = new QHBoxLayout(); m_layout->addLayout(m_nameLayout); m_layout->addSpacing(5); m_taskLayout = new QHBoxLayout(); m_layout->addLayout(m_taskLayout); m_typeLayout = new QHBoxLayout(); m_layout->addLayout(m_typeLayout); m_buttonLayout = new QHBoxLayout(); m_layout->addLayout(m_buttonLayout); // 名称 m_nameLayout->addWidget(m_name); m_nameLayout->addStretch(); m_nameLayout->addWidget(m_time); // 任务 m_taskLayout->setContentsMargins(10, 0, 10, 0); m_taskLayout->addWidget(m_taskLabel); m_taskLayout->addSpacing(5); m_taskLayout->addWidget(m_task); m_taskLayout->addStretch(); // 类型 m_typeLayout->setContentsMargins(10, 0, 10, 0); m_typeLayout->addWidget(m_typeLabel); m_typeLayout->addSpacing(5); m_typeLayout->addWidget(m_type); m_typeLayout->addStretch(); // 按钮 m_buttonLayout->addStretch(); m_buttonLayout->addWidget(m_open); m_buttonLayout->addWidget(m_edit); } 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) { return; } m_name->setText(info->projectName); QDateTime t = QDateTime::fromTime_t(info->estimateTime.toUInt()); m_time->setText(t.toString("yyyy-M-d")); m_task->setText(info->taskName); QString tStr; QList types = ProjectManager::evalTypeList(*info); for (int i = 0; i < types.count(); i++) { tStr += ProjectManager::nameOfEvalType(types[i]); if (i < types.count() - 1) { tStr += "、"; } } 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(); initLayout(); connectSiganlsAndSlots(); } void ProjectListWidget::showProjects(QList list) { m_listWidget->clear(); 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)); m_listWidget->setItemWidget(item, w); } } ProjectListItemWidget *ProjectListWidget::itemWidget(QListWidgetItem *item) const { QWidget *w = m_listWidget->itemWidget(item); return dynamic_cast(w); } void ProjectListWidget::initWidgets() { QPalette pal(palette()); pal.setColor(QPalette::Background, QColor("#eeeeee")); setAutoFillBackground(true); setPalette(pal); m_vBoxLayout = new QVBoxLayout(this); m_listWidget = new QListWidget(this); 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(233, 233, 244);}"); } void ProjectListWidget::initLayout() { m_vBoxLayout->setMargin(0); m_vBoxLayout->addWidget(m_listWidget); } void ProjectListWidget::connectSiganlsAndSlots() { connect(m_listWidget, &QListWidget::itemDoubleClicked, this, &ProjectListWidget::slotItemDoubleClicked); connect(m_listWidget, &QListWidget::itemClicked, this, &ProjectListWidget::slotItemClicked); connect(m_listWidget, &QListWidget::currentItemChanged, this, &ProjectListWidget::slotCurrentItemChanged); connect(m_listWidget, &QListWidget::currentRowChanged, this, &ProjectListWidget::slotCurrentRowChanged); connect(m_listWidget, &QListWidget::itemSelectionChanged, this, &ProjectListWidget::slotItemSelectionChanged); } void ProjectListWidget::slotItemDoubleClicked(QListWidgetItem *item) { qDebug() << __FUNCTION__ << __LINE__; } void ProjectListWidget::slotItemClicked(QListWidgetItem *item) { qDebug() << __FUNCTION__ << __LINE__; } void ProjectListWidget::slotCurrentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { qDebug() << __FUNCTION__ << __LINE__; } void ProjectListWidget::slotCurrentRowChanged(int currentRow) { qDebug() << __FUNCTION__ << __LINE__; } void ProjectListWidget::slotItemSelectionChanged() { qDebug() << __FUNCTION__ << __LINE__; } void ProjectListWidget::slotOpen() { ProjectListItemWidget *w = dynamic_cast(sender()); qDebug() << __FUNCTION__ << __LINE__ << w->index() << w->info()->projectName; } void ProjectListWidget::slotEdit() { ProjectListItemWidget *w = dynamic_cast(sender()); qDebug() << __FUNCTION__ << __LINE__ << w->index() << w->info()->projectName; ; }