2011-01-14 7 views
6

मैं एक QGraphicsView रखना चाहता हूं जो स्वचालित रूप से कभी भी स्क्रॉल नहीं करता है।QGraphicsView: स्वचालित स्क्रॉलिंग अक्षम करें

इसी तरह: मूल रूप से, मेरा प्रश्न http://developer.qt.nokia.com/forums/viewthread/2220 के समान है, लेकिन उस धागे को उत्तर नहीं मिला।

क्या मैं अब तक की कोशिश की है:

  • showEvent() और resizeEvent() के भीतर, मैं क्या UI-> graphicsView-> fitInView (...) है, जो ठीक जब तक आइटम नहीं है के रूप में काम स्क्रीन आयत
  • मैं भी जोड़ तोड़ को बदलने देखने की कोशिश की है लक्ष्य के पार चले, लेकिन अलग स्केलिंग यह गुणांक कभी नहीं बदल रहा है से, तो यह निरर्थक भी था,
  • Diabling स्क्रॉल पट्टी उपस्थिति में मदद नहीं करता है, भी

http://doc.qt.io/qt-4.8/qgraphicsview.html भी देखें।

उत्तर

3

मुझे एक समाधान मिला (अपने विकल्पों को पोस्ट करने में संकोच नहीं करें :)), फिर भी मैंने सोचा कि यह जवाब उपयोगी हो सकता है क्योंकि मैंने Google और दस्तावेज़ों पर 15 घंटों तक संघर्ष किया था।

कुंजी केवल fitInView() को कॉल करने के लिए नहीं है, बल्कि सेटसेनरक्ट() भी सेट है।

void FooBar::resizeEvent(QResizeEvent *) { 
     fitView(); 
} 

void FooBar::showEvent(QShowEvent *) { 
     fitView(); 
} 

void FooBar::fitView() { 
     const QRectF rect = QRectF(-0.5,-0.5, 1, 1); 
     ui->graphicsView->fitInView(rect, 
            Qt::KeepAspectRatio); 
     ui->graphicsView->setSceneRect(rect); 
} 
7

मेरे समाधान थोड़ा अधूरा है, लेकिन मुझे लगता है कि यह बहुत सहज है: आप QGraphicsView कभी अपना सामान स्क्रॉल करने के लिए नहीं करना चाहते हैं, ओवरराइड यह मैं हूँ (अपने स्वयं के वर्ग के नाम के साथ FooBar की जगह) के लिए यह किया आभासी विधि scrollContents द्वारा।

view->setEnabled(false); 

यह भी स्क्रॉल से रोकेंगे, लेकिन यह भी अब और माउस या कीबोर्ड की घटनाओं प्राप्त नहीं होगा:

void QGraphicsViewDerived::scrollContentsBy(int, int) 
{ 
    //don't do anything hah! 
} 
0

एक और सरल उपाय है, अगर कोई अन्तरक्रियाशीलता की जरूरत है, QGraphicsView निष्क्रिय करने के लिए है ।

1

view->setDragMode(QGraphicsView::NoDrag); मेरे लिए चाल है।

एनोवेट का समाधान भी काम करता है सिवाय इसके कि यह दृश्य के ताज़ा करने में हस्तक्षेप करता है।

1

मैं सही समाधान नहीं मिला, अपने दृश्य के निर्माता में

QGraphicsView::setSceneRect(yourScene->sceneRect()) 

फोन करके, स्वत: स्क्रॉल व्यवहार बंद कर दिया है।