मेरे विगेट्स की संरचना है:क्यूटी में स्क्रॉलबार दिखाई देने के लिए मैं विजेट ओवरफ़्लो कैसे बना सकता हूं?
QWidget गोलाकार सीमाओं वाला पैनल बनने के लिए अनुकूलित किया गया।
एक QVBoxLayout (खड़ी जोड़ने सामग्री) के साथ QScrollArea
तो मैं इसे एक के अंदर जोड़ें:
एक मार्जिन के साथ सीमाओं के अंदर स्क्रॉलबार के साथ एक क्षेत्र को शामिल करने के लिए, तो मैं इस के अंदर डाल की श्रृंखला: एक QFormLayout
रिक्ति 0 के साथ शीर्षक के साथ QGroupBox, और
फॉर्मलेआउट काम नहीं करता जैसा मैंने सोचा था कि यह होगा। अंदर के विजेट लेबल + स्पिनबॉक्स हैं, उनमें से सभी।
पहले:
यहाँ एक छवि है। वे केंद्रित नहीं हैं। मुझे नहीं पता क्यों।
दूसरा। जैसा कि मैंने उनसे कहा था, वे सभी एक ही निश्चित आकार दिए गए हैं, लेकिन वे किसी भी तरह से ढेर नहीं हैं, इसलिए वे एक दूसरे को छुपाते हैं। यह उस आकार में क्यों नहीं रहता है और माता-पिता QScrollArea स्क्रॉलबार को बाहर दिखाता है? मैं यही चाहता था।
मैं नहीं चाहता कि सामग्रियों को स्क्वैश या फैलाया जाए। मैं उन्हें शीर्ष पर होना चाहता हूं। यदि स्क्रीन बहुत बड़ी है, तो पैनल लंबा होगा, लेकिन सामग्री शीर्ष पर होगी, वैसे ही एक ही आकार के साथ।
किसी ने कोड का अनुरोध किया है, इसलिए मैं इसे यहां कॉपी करता हूं, लेकिन यह कोड वास्तव में बड़ा है ... मुझे लगता है कि यह अधिक भ्रमित है। लेकिन अच्छी तरह से, बीमार किसी भी अर्थ के साथ लाइनों को हटा दें।
// 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).
अब सभी की स्टाइलशीट आता है::
/* 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);
}
क्या आपने इसे जोड़ा? हमें कुछ कोड दिखाएं, न कि परिणाम –
वहां आपके पास पूरा कोड है। उम्मीद है कि यह उपयोगी है! – darkgaze
सबकुछ अब स्पष्ट है। आपको स्क्रॉल क्षेत्र पर लेआउट सेट नहीं करना चाहिए। इसके बजाय 'QScrollArea :: setWidget (QWidget *) 'विधि का उपयोग करें। –