La struttura dei miei widget è:Come posso fare overflow di widget per far apparire una barra di scorrimento in Qt?
QWidget personalizzato per essere un pannello con bordi arrotondati.
per contenere una zona con barra di scorrimento all'interno dei confini con un margine, poi ho messo questo all'interno:
QScrollArea con un (contenuto in verticale l'aggiunta) QVBoxLayout
poi aggiungo all'interno di esso un serie di:
QGroupBox con titolo con spaziatura 0, e una QFormLayout
Il formlayout non funziona come pensavo. I widget all'interno sono le etichette + spinbox, tutti loro.
Ecco un'immagine:
First. Non sono centrati Non so perché.
Secondo. Hanno tutti la stessa misura fissa, come ho detto loro, ma sono ammucchiati comunque, non schiacciati, quindi si nascondono. Perché non rimane tale dimensione e il genitore QScrollArea mostra la barra di scorrimento all'esterno ?. È quello che voglio.
Non voglio che il contenuto sia schiacciato o allungato. Voglio che siano in cima. Se lo schermo è molto grande, il pannello sarà lungo, ma i contenuti saranno in alto, sempre con le stesse dimensioni.
Qualcuno ha richiesto il codice, in modo copio qui, ma il codice è davvero grande ... Penso che sia più confusa. Ma bene, malato rimuovere le linee senza significato. Qui è la parte che si vede in quella scatola:
// THE PANEL OUTSIDE (A QWIDGET) is mainParametersLayout_. This particular scroll bar inside
// is cameraModeParametersPanel_
cameraModeParametersPanel_ = new QScrollArea();
cameraModeParametersPanel_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
cameraModeParametersPanel_->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
mainParametersLayout_->addWidget(cameraModeParametersPanel_);
// HERE THERE ARE TWO MORE QGROUP BOXES. THE ONE THAT DOESN´T STAY THE WAY I SHOWED IS THIS.
QVBoxLayout* mainCameraLayout = new QVBoxLayout(cameraModeParametersPanel_);
mainCameraLayout->setSpacing(5);
// GROUP BOX
QGroupBox* activeCameraParametersGroup = new QGroupBox();
activeCameraParametersGroup->setObjectName(parametersContainerName);
activeCameraParametersGroup->setTitle(strings->cameraModeCameraParamsTitle);
mainCameraLayout->addWidget(activeCameraParametersGroup);
// LAYOUT
QFormLayout* paramLayout = new QFormLayout(activeCameraParametersGroup);
paramLayout->setRowWrapPolicy(QFormLayout::DontWrapRows);
paramLayout->setFormAlignment(Qt::AlignHCenter | Qt::AlignTop);
paramLayout->setLabelAlignment(Qt::AlignRight);
// Iso : Spin Integer
isoSpin = new SmartIntSpinButtons(control->getMinISO(), control->getMaxISO());
isoSpin->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
paramLayout->addRow(strings->cameraISOCapString, isoSpin);
// FStop: Spin Double
fstopSpin = new SmartDoubleSpinButtons(control->getMinFStop(), control->getMaxFStop(), 2);
fstopSpin->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
paramLayout->addRow(strings->cameraFStopString, fstopSpin);
// some other spins here...
// Camera position: 3 Spin Double (X,Y,Z)
camPosSpinX = new SmartDoubleSpinButtons(control->getMinCamPos(), control->getMaxCamPos(), 1);
camPosSpinY = new SmartDoubleSpinButtons(control->getMinCamPos(), control->getMaxCamPos(), 1);
camPosSpinZ = new SmartDoubleSpinButtons(control->getMinCamPos(), control->getMaxCamPos(), 1);
camPosSpinX->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
camPosSpinY->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
camPosSpinZ->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
paramLayout->addRow(new QLabel(strings->cameraPositionString));
QHBoxLayout* positionLy = new QHBoxLayout();
positionLy->addWidget(camPosSpinX);
positionLy->addWidget(camPosSpinY);
positionLy->addWidget(camPosSpinZ);
paramLayout->addRow(positionLy);
// Target Position: 3 Spin Double(X,Y,Z)
camTargetPosSpinX = new SmartDoubleSpinButtons(control->getMinCamTarget(), control->getMaxCamTarget(), 1);
camTargetPosSpinY = new SmartDoubleSpinButtons(control->getMinCamTarget(), control->getMaxCamTarget(), 1);
camTargetPosSpinZ = new SmartDoubleSpinButtons(control->getMinCamTarget(), control->getMaxCamTarget(), 1);
camTargetPosSpinX->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
camTargetPosSpinY->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
camTargetPosSpinZ->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
paramLayout->addRow(new QLabel(strings->cameraTargetPositionString));
QHBoxLayout* targetLy = new QHBoxLayout();
targetLy->addWidget(camTargetPosSpinX);
targetLy->addWidget(camTargetPosSpinY);
targetLy->addWidget(camTargetPosSpinZ);
paramLayout->addRow(targetLy);
// and the resoultion spins, which are the same style like the last one (but only X and Y).
Ora arriva il foglio di stile di tutti:
/* THE PANEL THAT CONTAINS THE QSCROLLBAR OUTSIDE */
SmartPanel
{
background-image: url(:/resources/images/containers/panel_bg.png);
background-repeat: repeat-y;
background-position: left top;
background-color: white;
border: 1px solid #aaa;
border-radius: 10;
min-width: 20px;
padding: 5px;
}
QScrollArea#parametersPanelScrollArea
{
background: transparent;
border: none;
}
/* the qgroupbox */
QGroupBox#parametersContainer
{
background-color: white;
padding-top: 25px;
border-style: solid;
border-width: 1px;
border-color: #aaa;
border-radius: 10px;
}
QGroupBox#parametersContainer::title {
subcontrol-origin: margin;
subcontrol-position: top center;
border: 1px solid #aaa;
margin-top: -5px;
padding: 8px 5px 5px 5px;
font-size: 18px;
border-radius: 5px;
}
/* ------------------ SPINBOX WIDGET ------------------------------------------*/
QWidget#intSpin, QWidget#doubleSpin
{
min-height: 20px;
border: 1px solid #ccc;
padding: 0px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #ddd, stop:1 #fff);
}
QPushButton#upSpinBtn,
QPushButton#downSpinBtn
{
border-radius: 0px;
/*background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #ddd, stop:1 #fff);*/
background-repeat: no-repeat;
background-position: center;
border: none;
}
QPushButton#upSpinBtn
{
background-image: url(:/resources/images/buttons/up_sm_arrow.png);
}
QPushButton#downSpinBtn
{
background-image: url(:/resources/images/buttons/down_sm_arrow.png);
}
ow hai aggiunto? Mostraci un codice, non il risultato –
Lì hai l'intero codice. Spero sia utile! – darkgaze
Tutto è chiaro ora. Non dovresti impostare il layout nell'area di scorrimento. Usa invece il metodo 'QScrollArea :: setWidget (QWidget *)'. –