Cấu trúc tiện ích con của tôi là:Làm thế nào tôi có thể làm cho các widget tràn để làm cho một thanh cuộn xuất hiện trong Qt?
QWidget được tùy chỉnh thành bảng có đường viền tròn.
Để chứa một khu vực có thanh cuộn bên trong biên giới với một biên độ, sau đó tôi đặt bên này:
QScrollArea với một (nội dung theo chiều dọc thêm) QVBoxLayout
Sau đó, tôi thêm bên trong của nó một loạt:
QGroupBox với tiêu đề với khoảng cách 0, và một QFormLayout
Formlayout không hoạt động như tôi nghĩ. Các tiện ích bên trong là các nhãn + hộp xoay tròn, tất cả chúng.
Dưới đây là một hình ảnh:
đầu tiên. Chúng không tập trung. Tôi không biết tại sao.
Thứ hai. Tất cả chúng đều có cùng một kích thước cố định, như tôi đã nói với chúng, nhưng chúng vẫn chồng chất, không bị đè bẹp, vì vậy chúng ẩn nhau. Tại sao nó không ở kích thước đó và QScrollArea của cha mẹ cho thấy thanh cuộn bên ngoài ?. Đó là điều tôi muốn.
Tôi không muốn nội dung bị đè bẹp hoặc kéo dài. Tôi muốn họ đứng đầu. Nếu màn hình là rất lớn, bảng điều khiển sẽ được dài, nhưng nội dung sẽ được trên đầu trang, allways với kích thước tương tự.
Ai đó đã yêu cầu mã, vì vậy tôi sao chép mã ở đây, nhưng mã thực sự lớn ... Tôi nghĩ nó khó hiểu hơn. Nhưng tốt, bệnh loại bỏ các dòng không có ý nghĩa. Dưới đây là phần mà bạn thấy trong hộp:
// 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).
Bây giờ đến stylesheet của tất cả:
/* 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);
}
bạn đã thêm tiền vào tài khoản? Hiển thị cho chúng tôi một số mã, không phải kết quả –
Ở đó bạn có toàn bộ mã. Hy vọng nó hữu ích! – darkgaze
Mọi thứ đã rõ ràng. Bạn không nên đặt bố trí trên khu vực cuộn. Thay vào đó hãy sử dụng phương thức 'QScrollArea :: setWidget (QWidget *)'. –