2013-01-10 13 views
6

मेरे विगेट्स की संरचना है:क्यूटी में स्क्रॉलबार दिखाई देने के लिए मैं विजेट ओवरफ़्लो कैसे बना सकता हूं?

QWidget गोलाकार सीमाओं वाला पैनल बनने के लिए अनुकूलित किया गया।

एक QVBoxLayout (खड़ी जोड़ने सामग्री) के साथ QScrollArea

तो मैं इसे एक के अंदर जोड़ें:

एक मार्जिन के साथ सीमाओं के अंदर स्क्रॉलबार के साथ एक क्षेत्र को शामिल करने के लिए, तो मैं इस के अंदर डाल की श्रृंखला: एक QFormLayout

रिक्ति 0 के साथ शीर्षक के साथ QGroupBox, और

फॉर्मलेआउट काम नहीं करता जैसा मैंने सोचा था कि यह होगा। अंदर के विजेट लेबल + स्पिनबॉक्स हैं, उनमें से सभी।

Image

पहले:

यहाँ एक छवि है। वे केंद्रित नहीं हैं। मुझे नहीं पता क्यों।

दूसरा। जैसा कि मैंने उनसे कहा था, वे सभी एक ही निश्चित आकार दिए गए हैं, लेकिन वे किसी भी तरह से ढेर नहीं हैं, इसलिए वे एक दूसरे को छुपाते हैं। यह उस आकार में क्यों नहीं रहता है और माता-पिता 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); 
} 
+1

क्या आपने इसे जोड़ा? हमें कुछ कोड दिखाएं, न कि परिणाम –

+0

वहां आपके पास पूरा कोड है। उम्मीद है कि यह उपयोगी है! – darkgaze

+0

सबकुछ अब स्पष्ट है। आपको स्क्रॉल क्षेत्र पर लेआउट सेट नहीं करना चाहिए। इसके बजाय 'QScrollArea :: setWidget (QWidget *) 'विधि का उपयोग करें। –

उत्तर

16

QScrollArea एक कंटेनर नहीं है यहाँ हिस्सा आपको लगता है कि बॉक्स में दिखाई देते है। QScrollArea किसी अन्य विजेट के लिए "स्क्रॉलिंग व्यू" है। आपको QScrollArea पर लेआउट सेट नहीं करना चाहिए। आपको विजेट बनाना चाहिए, इसे उचित लेआउट से भरें और फिर स्क्रॉल करने योग्य बनाने के लिए QScrollArea::setWidget(QWidget *) का उपयोग करें।

+0

ओह। क्या मुझे अंदर एक qwidget डालना चाहिए, और फिर इसके लिए एक लेआउट सेट करें और QGroupBoxes डालें? – darkgaze

+0

हाँ! उत्तम। मजाकिया बात यह है कि मैं दस्तावेज़ों पर सबकुछ पढ़ता हूं, और उन्होंने इसका जिक्र नहीं किया। setLayout उपलब्ध है, और इसका उपयोग नहीं किया जाना चाहिए। याद रखना दिलचस्प है। बहुत बहुत धन्यवाद। आपको वोट न देने के लिए खेद है, लेकिन मेरे पास पर्याप्त प्रतिष्ठा नहीं है :-( – darkgaze

+0

सेटलाइट हर विजेट पर उपलब्ध है जैसा कि मुझे याद है (क्यूपशबटन पर भी) लेकिन QScrollArea के "विस्तृत विवरण" में स्पष्ट रूप से लिखा गया है कि आपको उपयोग करना है 'setWidget' –

संबंधित मुद्दे

 संबंधित मुद्दे