2011-01-14 43 views
6

Tôi muốn có một QGraphicsView không bao giờ cuộn tự động.QGraphicsView: Vô hiệu hoá tự động cuộn

Tương tự: Về cơ bản, câu hỏi của tôi giống hệt với http://developer.qt.nokia.com/forums/viewthread/2220, nhưng chuỗi đó không nhận được câu trả lời.

Những gì tôi đã cố gắng cho đến nay:

  • Trong showEvent() và resizeEvent(), tôi làm ui-> graphicsView-> fitInView (...), trong đó hoạt động tốt miễn là mặt hàng không vọt lố màn hình-hình chữ nhật
  • tôi cũng đã cố gắng thao tác xem biến đổi, nhưng ngoài việc mở rộng quy mô nó hệ số không bao giờ thay đổi, vì vậy đây là kết quả, quá
  • Diabling thanh cuộn xuất hiện không được, quá

Xem thêm http://doc.qt.io/qt-4.8/qgraphicsview.html.

Trả lời

3

Tôi tìm thấy giải pháp (đừng ngần ngại đăng lựa chọn thay thế của bạn :)), tôi vẫn nghĩ câu trả lời này có thể hữu ích khi tôi gặp khó khăn trên google và tài liệu trong 15 giờ.

Điều quan trọng là không chỉ gọi fitInView(), mà còn setSceneRect(). Đây đã làm nó cho tôi (thay thế Foobar với tên lớp của riêng bạn):

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

Giải pháp của tôi là một chút sơ sài nhưng tôi nghĩ nó khá trực quan: Nếu bạn không muốn QGraphicsView bao giờ di chuyển công cụ của bạn, ghi đè phương thức ảo scrollContentsBy.

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

Một giải pháp đơn giản, nếu không có sự tương tác là cần thiết, là để vô hiệu hóa các QGraphicsView:

view->setEnabled(false); 

này cũng sẽ ngăn chặn nó từ di chuyển, tuy nhiên nó cũng sẽ không nhận được chuột hoặc bàn phím các sự kiện nữa .

1

view->setDragMode(QGraphicsView::NoDrag); đã thực hiện thủ thuật cho tôi.

Giải pháp từ anonvt cũng đã hoạt động ngoại trừ việc nó can thiệp vào cảnh làm mới.

1

tôi tìm thấy giải pháp hoàn hảo, bằng cách gọi

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

trong constructor của tầm nhìn của bạn, hành vi di chuyển tự động dừng lại.

Các vấn đề liên quan