Моя иерархия графических элементов следующая:
QScrollArea > QFrame > [QLabel, QGroupBox, QGroupBox]
В настоящее время это выглядит так:
and if I add other elements to the QFrame
it gets even worse:
худшая ситуация
Как я могу указать QFrame
изменить размер вместо сжатия детей?
Весь код выглядит так:
#ifndef GESTIONALE_H
#define GESTIONALE_H
#include <QWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QPushButton>
#include <QLabel>
#include <QCheckBox>
#include <QMenuBar>
#include <QMenu>
#include <QTableView>
#include <QGroupBox>
#include <QComboBox>
#include <QFile>
#include <QScrollArea>
#include "gestionalebutton.h"
class Gestionale : public QWidget{
Q_OBJECT
public:
Gestionale(QWidget *parent = nullptr);
~Gestionale();
private:
QHBoxLayout* mainLayout;
//Layout Sinistro con tutti i suoi componenti
QVBoxLayout* layoutGestione;
QGroupBox* Visualizzare;
QVBoxLayout* LayoutVisualizzare;
//Layout Destro con tutti i suoi componenti
QHBoxLayout* Left;
QVBoxLayout* layoutVisualizza;
void addBoxDestro();
void addBoxSinistro();
void addComboBox();
void addFirstBox();
void addBoxPersona();
void addBoxLavoro();
void addAzioni();
void setStyle();
};
#endif // GESTIONALE_H
#include "gestionale.h"
#include "ui_gestionale.h"
Gestionale::Gestionale(QWidget *parent): QWidget(parent){
mainLayout = new QHBoxLayout(this);
this->setMinimumSize(1280, 800);
mainLayout->setAlignment(Qt::AlignTop);
mainLayout->setContentsMargins(0,0,0,0);
addBoxSinistro();
addBoxDestro();
setStyle();
setLayout(mainLayout);
}
Gestionale::~Gestionale(){};
void Gestionale::addBoxSinistro()
{
auto scroll = new QScrollArea(this);
scroll->setObjectName("scroll-left");
scroll->setFixedWidth(270);
scroll->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
scroll->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
auto* Gestione = new QFrame(scroll);
Gestione->setFixedWidth(250);
layoutGestione = new QVBoxLayout(Gestione);
layoutGestione->setAlignment(Qt::AlignTop);
addComboBox();
addFirstBox();
scroll->setWidget(Gestione);
scroll->setAlignment(Qt::AlignHCenter);
mainLayout->addWidget(scroll);
}
void Gestionale::addComboBox()
{
QLabel* Visualizza = new QLabel("Metriche visualizzazione:", this, Qt::WindowFlags());
Visualizza->setObjectName("title-left");
layoutGestione->addWidget(Visualizza);
QComboBox* Dipendenti = new QComboBox(this);
Dipendenti->addItems({
"Tutti",
"Manutentore",
"Hardware",
"Software",
"BackDev",
"FrontDev",
"FullStack",
"BDDeveloper",
"GUIDeveloper",
"ITSecurityDev",
"Tecnico"
});
layoutGestione->addWidget(Dipendenti);
}
void Gestionale::addFirstBox()
{
Visualizzare = new QGroupBox(this);
Visualizzare->setTitle("Cosa Visualizzare");
LayoutVisualizzare = new QVBoxLayout(Visualizzare);
addBoxPersona();
addBoxLavoro();
layoutGestione->addWidget(Visualizzare);
}
void Gestionale::addBoxPersona()
{
QGroupBox* DatiPersona = new QGroupBox(this);
DatiPersona->setObjectName("DatiPersona");
DatiPersona->setTitle("Dati della persona");
QVBoxLayout* layoutDatiPersona = new QVBoxLayout(DatiPersona);
QCheckBox* Cognome = new QCheckBox("Cognome",this);
layoutDatiPersona->addWidget(Cognome);
QCheckBox* Nome = new QCheckBox("Nome",this);
layoutDatiPersona->addWidget(Nome);
QCheckBox* Sesso = new QCheckBox("Sesso",this);
layoutDatiPersona->addWidget(Sesso);
QCheckBox* Eta = new QCheckBox("Eta'",this);
layoutDatiPersona->addWidget(Eta);
LayoutVisualizzare->addWidget(DatiPersona);
}
void Gestionale::addBoxLavoro()
{
QGroupBox* DatiDip = new QGroupBox(this);
DatiDip->setTitle("Dati relativi al lavoro");
QVBoxLayout* layoutDatiDip = new QVBoxLayout(DatiDip);
QCheckBox* DataA = new QCheckBox("Data assunzione",this);
layoutDatiDip->addWidget(DataA);
QCheckBox* DataFineContratto = new QCheckBox("Data fine contratto",this);
layoutDatiDip->addWidget(DataFineContratto);
QCheckBox* StipendioBase = new QCheckBox("Stipendio Base Mensile",this);
layoutDatiDip->addWidget(StipendioBase);
QCheckBox* OreLavoro= new QCheckBox("Ore di lavoro settimanale",this);
layoutDatiDip->addWidget(OreLavoro);
LayoutVisualizzare->addWidget(DatiDip);
}
void Gestionale::addBoxDestro()
{
QGroupBox* Visualizza = new QGroupBox(this);
Visualizza->setTitle("Visualizzazione Dipendenti");
layoutVisualizza = new QVBoxLayout(Visualizza);
QTableView* Tabella = new QTableView();
layoutVisualizza->addWidget(Tabella);
addAzioni();
addAzioni();
mainLayout->addWidget(Visualizza);
}
void Gestionale::addAzioni()
{
QGroupBox* Azioni = new QGroupBox(this);
Azioni->setTitle("Azioni sui dipendenti");
Azioni->setObjectName("azioni-left");
QVBoxLayout* layoutAzioni = new QVBoxLayout(Azioni);
QPushButton* Inserisci = new QPushButton("Inserisci",Azioni);
layoutAzioni->addWidget(Inserisci);
QPushButton* Modifica = new QPushButton("Modifica",Azioni);
layoutAzioni->addWidget(Modifica);
QPushButton* Elimina = new QPushButton("Elimina",Azioni);
layoutAzioni->addWidget(Elimina);
layoutGestione->addWidget(Azioni);
}
void Gestionale::setStyle()
{
QFile file(":/resources/style.css");
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
setStyleSheet(styleSheet);
}
И стиль выглядит следующим образом:
/*QGroupBox#DatiPersona{background-color:rgb(58,53,43);}*/
#scroll-left, #scroll-left *{
background-color:#1565C0;
color: white;
font-family: helvetica;
}
#scroll-left #title-left{
font-size: 18px;
font-weight: bold;
}
#scroll-left QComboBox, #scroll-left QComboBox *{
background-color:white;
color:black;
}
#scroll-left QCheckBox::indicator{
background-color: white;
color:black;
border-radius: 6px;
border: 3px solid white;
}
#scroll-left QCheckBox::indicator:checked {
background-color: #aaf255 !important;
}
#scroll-left QCheckBox::indicator:unchecked {
background-color: white !important;
}
#scroll-left QGroupBox{
border:1px solid white;
border-radius:5px;
margin-top: 1ex;
padding:10px 5px;
font-weight: bold;
padding-bottom:0px;
padding-bottom:0px;
}
#scroll-left QGroupBox::title{
subcontrol-origin: margin;
subcontrol-position:top center;
padding:0 3px;
}
#scroll-left QGroupBox QGroupBox{
border:2px solid white;
border-width: 0 0 0 2px;
border-radius:0px;
margin-top: 1ex;
margin-bottom:10px;
padding-bottom:0px;
font-weight: normal;
}
#scroll-left QGroupBox QGroupBox::title{
subcontrol-origin: margin;
subcontrol-position:top left;
padding:0 3px;
}
#scroll-left QPushButton {
color:black;
padding: 5px;
border-radius: 12px;
background-color: white;
}
#scroll-left QPushButton:pressed {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #dadbde, stop: 1 #f6f7fa);
}