Struktura moich widżetów to:Jak mogę spowodować przepełnienie widgetów, aby pasek przewijania pojawił się w Qt?
QWidget dostosowany do panelu z zaokrąglonymi obramowaniami.
Aby zawierać obszar przewijania wewnątrz granic z marginesu, a następnie umieścić ten Wewnątrz:
QScrollArea z QVBoxLayout (pionowo dodawanie treści)
Następnie dodaję wewnątrz on seria:
QGroupBox z tytułowy z odstępem 0, a QFormLayout
Formlayout nie działa tak, jak myślałem. Widżety w środku to etykiety + spinboksy, wszystkie z nich.
Oto zdjęcie:
pierwszy. Nie są wyśrodkowane. Nie wiem dlaczego.
Po drugie. Wszystkie one mają taki sam stały rozmiar, jak im powiedziałem, ale i tak są ułożone, nie zgniecione, więc się chowają. Dlaczego nie utrzymuje się tego rozmiaru, a rodzic QScrollArea pokazuje pasek przewijania na zewnątrz ?. To jest to czego chce.
Nie chcę, aby zawartość była zgnieciona lub rozciągnięta. Chcę, żeby były na szczycie. Jeśli ekran jest bardzo duży, panel będzie długi, ale zawartość będzie na górze, zawsze o tym samym rozmiarze.
Ktoś poprosił o kod, więc go tutaj skopiuję, ale kod jest naprawdę duży ... Myślę, że to bardziej zagmatwane. Ale dobrze, źle usuń linie bez znaczenia. Oto część można zobaczyć w tym polu:
// 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).
Teraz przychodzi stylów wszystkim:
/* 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 dodałeś to? Pokaż nam kod, a nie wynik. –
Masz cały kod. Mam nadzieję, że to przydatne! – darkgaze
Teraz wszystko jest jasne. Nie powinieneś ustawiać układu na obszarze przewijania. Zamiast tego użyj metody 'QScrollArea :: setWidget (QWidget *)'. –