From ffa0ac065adcae94e5ad984bbb0c04aa7a82e12c Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Sat, 17 Dec 2022 11:42:18 +0800 Subject: [PATCH] [UI][ADD] Model selectable item button --- FinalProject/modelselectable.cpp | 84 +++++++++++++++++++++++++++++++- FinalProject/modelselectable.h | 44 ++++++++++++++++- 2 files changed, 125 insertions(+), 3 deletions(-) diff --git a/FinalProject/modelselectable.cpp b/FinalProject/modelselectable.cpp index 6f70f09..811585f 100644 --- a/FinalProject/modelselectable.cpp +++ b/FinalProject/modelselectable.cpp @@ -1 +1,83 @@ -#pragma once +#include + +#include "modelselectable.h" +#include "sceneviewer.h" + +ModelSelectable::ModelSelectable(Model* model, QWidget* parent) : + QWidget(parent), _model(model) +{ + // Set size + setFixedHeight(150); + setSizeIncrement(QSizePolicy::Expanding, QSizePolicy::Fixed); + + // Create stretch layout to hold the main button + _stretchLayout = new QHBoxLayout(this); + _stretchLayout->setContentsMargins(0, 0, 0, 0); + _stretchLayout->setSpacing(0); + setLayout(_stretchLayout); + + // Create main button widget + _mainBtn = new PushButton(nullptr, this); + _mainBtn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + _mainBtn->setMargin(0, 0, 0, 0); + _mainBtn->setRadius(10); + _mainBtn->setBackgroundColor(QColor(58, 143, 183, 15)); + _stretchLayout->addWidget(_mainBtn); + _mainBtn->show(); + + // Create widget to hold the button content + _mainBtnChild = new QWidget(_mainBtn); + _mainBtnChild->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + //_mainBtnChild->setObjectName("mainBtnChild"); + //_mainBtnChild->setStyleSheet("QWidget#mainBtnChild{border: 3px solid " + _borderColor.name(QColor::HexArgb) + ";" + // "border-radius:" + QString::number(_cornerRadius) + "px;}"); + _mainBtn->setChildWidget(_mainBtnChild); + _mainBtnChild->show(); + + // Create layout to hold the button content + _mainLayout = new QHBoxLayout(_mainBtnChild); + _mainLayout->setContentsMargins(16, 12, 16, 12); + _mainLayout->setSpacing(12); + _mainBtnChild->setLayout(_mainLayout); + + // Create model thumbnail widget + _thumbnailContainer = new RoundedCornerWidget(_mainBtnChild); + _thumbnailContainer->setCornerRadius(_cornerRadius); + _thumbnailContainer->setBorderColor(QColor(255, 255, 255, 0)); + _thumbnailContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + _mainLayout->addWidget(_thumbnailContainer); + _thumbnailContainer->show(); + + _thumbnailWidget = new ModelThumbnailWidget(_model, _mainBtnChild); + _thumbnailWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + _thumbnailContainerLayout = new QHBoxLayout(_thumbnailContainer->mainWidget()); + _thumbnailContainerLayout->setContentsMargins(0, 0, 0, 0); + _thumbnailContainerLayout->setSpacing(0); + _thumbnailContainer->mainWidget()->setLayout(_thumbnailContainerLayout); + _thumbnailContainerLayout->addWidget(_thumbnailWidget); + _thumbnailWidget->show(); + + // Create delete button + _deleteButton = new PushButton(nullptr, _mainBtnChild); + _deleteButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + _deleteIcon = new QLabel(_deleteButton); + _deleteIcon->setFont(QFont("Font Awesome 6 Free Regular", 12)); + _deleteIcon->setText("\uf2ed"); + _deleteIcon->setAlignment(Qt::AlignCenter); + _deleteButton->setChildWidget(_deleteIcon); + _deleteButton->setColorScheme(QColor(171, 59, 58)); + _deleteButton->setIndicatorColor(QColor(171, 59, 58, 0)); + _deleteIcon->show(); + _mainLayout->addWidget(_deleteButton); + _deleteButton->show(); + + // Connect + connect(_mainBtn, &PushButton::onClick, this, &ModelSelectable::onSelected); + connect(_deleteButton, &PushButton::onClick, this, &ModelSelectable::onRemoved); +} + +ModelSelectable::~ModelSelectable() +{ + delete _model; +} \ No newline at end of file diff --git a/FinalProject/modelselectable.h b/FinalProject/modelselectable.h index 7fed472..acb94cf 100644 --- a/FinalProject/modelselectable.h +++ b/FinalProject/modelselectable.h @@ -1,6 +1,46 @@ #pragma once -#include "model.h" - #include +#include +#include +#include "model.h" +#include "pushbutton.h" +#include "roundedcornerwidget.h" +#include "modelthumbnailwidget.h" +#include "lineeditwidget.h" + +class ModelSelectable : public QWidget { + + Q_OBJECT + +public: + ModelSelectable(Model* model, QWidget* parent = 0); + ~ModelSelectable(); + +private: + // Data + Model* _model; + + // UI control variables + const QColor _borderColor = QColor(58, 143, 183); + const int _cornerRadius = 10; + + // UI elements + QHBoxLayout* _stretchLayout = nullptr; + PushButton* _mainBtn = nullptr; + + QWidget* _mainBtnChild = nullptr; + QHBoxLayout* _mainLayout = nullptr; + + RoundedCornerWidget* _thumbnailContainer = nullptr; + QHBoxLayout* _thumbnailContainerLayout = nullptr; + ModelThumbnailWidget* _thumbnailWidget = nullptr; + + PushButton* _deleteButton = nullptr; + QLabel* _deleteIcon = nullptr; + +signals: + void onSelected(); + void onRemoved(); +};