Remove space; Inside the table cell but outside my custom widget
Here some code snap. @ChrisW67
#include "ElementsListWidget.h"
#include "AbstractElement.h"
#include "ElementDragEventHandler.h"
#include <QAbstractScrollArea>
#include <QGridLayout>
#include <QLabel>
#include <QPixmap>
#include <QScrollArea>
#include <QSortFilterProxyModel>
#include <QVariant>
#include <qscrollbar.h>
#include <qstandarditemmodel.h>
#include <qtreeview.h>
ElementsListWidget::ElementsListWidget(QWidget* parent)
: QWidget(parent)
{
QVBoxLayout* mainlayout = new QVBoxLayout(this);
mainlayout->setContentsMargins(0, 0, 0, 0);
elementsListLayout = new QTreeView(this);
elementsListLayout->setContentsMargins(0, 0, 0, 0);
elementsListLayout->setHeaderHidden(true);
elementsListLayout->setIndentation(0);
elementsListLayout->setUniformRowHeights(false);
elementsListLayout->setObjectName("ElementsListWidget");
elementsListLayout->setSelectionMode(QAbstractItemView::NoSelection);
elementsListLayout->verticalScrollBar()->parent()->setProperty("background_transparent", true);
elementsListLayout->horizontalScrollBar()->parent()->setProperty("background_transparent", true);
sourceModel = new QStandardItemModel(this);
elementsListLayout->setModel(sourceModel);
mainlayout->addWidget(elementsListLayout);
setLayout(mainlayout);
elementsPerRow = 3;
totalModelElements = 0;
sourceModel->setColumnCount(elementsPerRow);
}
void ElementsListWidget::addElement(AbstractElement* element)
{
elementsModel << element;
showWidgetOnView(createDisplayUnit(element));
}
QWidget* ElementsListWidget::createDisplayUnit(AbstractElement* element)
{
if (!element) {
return nullptr;
}
QWidget* elementDispalyWidget = new QWidget;
elementDispalyWidget->setObjectName("elementDisplayUnit");
QVBoxLayout* elementdisplayLay = new QVBoxLayout(elementDispalyWidget);
//elementdisplayLay->setContentsMargins(0, 0, 0, 0);
QLabel* elementIconLabel = new QLabel(elementDispalyWidget);
elementIconLabel->setObjectName("elementIconLabel");
elementIconLabel->setProperty("element", QVariant::fromValue(static_cast<AbstractElement*>(element)));
elementIconLabel->setCursor(Qt::OpenHandCursor);
elementIconLabel->setAlignment(Qt::AlignCenter);
elementIconLabel->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
elementIconLabel->installEventFilter(new ElementDragEventHandler(elementIconLabel)); // Install event filter
elementIconLabel->setPixmap(element->getImage().scaled(50, 50));
QLabel* elementNameLabel = new QLabel(element->getName(), elementDispalyWidget);
elementNameLabel->setObjectName("elementNameLabel");
elementNameLabel->setAlignment(Qt::AlignCenter);
elementNameLabel->setWordWrap(true);
elementdisplayLay->setAlignment(Qt::AlignHCenter);
elementdisplayLay->addWidget(elementIconLabel);
elementdisplayLay->addWidget(elementNameLabel);
elementdisplayLay->addStretch();
elementDispalyWidget->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
return elementDispalyWidget;
}
void ElementsListWidget::setElementsPerRow(int numberOfelementsPerRow)
{
if (numberOfelementsPerRow > 0) {
elementsPerRow = numberOfelementsPerRow;
}
}
void ElementsListWidget::serachElement(const QString& searchText)
{
clearModel();
// Iterate through the stored widgets in elementWidgetModel
for (AbstractElement* element : elementsModel) {
if (element && element->getName().contains(searchText, Qt::CaseInsensitive)) {
showWidgetOnView(createDisplayUnit(element));
}
}
}
void ElementsListWidget::showWidgetOnView(QWidget* elementDisplayUnit)
{
if (elementDisplayUnit == nullptr) {
return;
}
QStandardItem* item = new QStandardItem;
// Calculate the row and column count for the new element
int row = totalModelElements / elementsPerRow;
int column = totalModelElements % elementsPerRow;
sourceModel->setItem(row, column, item);
elementsListLayout->setIndexWidget(item->index(), elementDisplayUnit);
totalModelElements++;
}
void ElementsListWidget::clearModel() {
sourceModel->clear();
totalModelElements = 0;
}
styel sheet for few widget
QWidget#ElementsListWidget {
background-color: #DAE0E9;
color: #3B5571;
border: none;
}
#elementDisplayUnit {
background-color: transparent;
font-size: 14px;
}
#elementIconLabel {
width: 64px;
background-color: #ffffff;
border: 1px solid #BEC9CD;
height: 64px;
position: relative;
/* align-items: center; */
border-radius: 5px;
/* justify-content: center; */
background-color: #FFFFFF;
}
#elementIconLabel:hover {
background-color: lightgray;
}
#elementNameLabel {
padding: 0px 0 0 0;
font-size: 11px;
max-width: 64px;
text-align: center;
line-height: 12px;
/* text-overflow: ellipsis; */
background-color: transparent;
/* word-wrap: break-word; */
font-weight: bold;
}