2013-04-19 34 views
5

Tôi có một cửa sổ QGraphicsView trên tiện ích của mình và vừa đặt vào một sự kiện cho bánh xe chuột phóng to hình ảnh.Xóa chức năng cuộn trên bánh xe chuột Khung nhìn QGraphics

Tuy nhiên ngay khi tôi phóng to các thanh cuộn được hiển thị và chức năng cuộn trên bánh xe chuột sẽ ghi đè chức năng thu phóng tôi có.

tôi đã tự hỏi nếu có bất kỳ cách nào mà tôi có thể loại bỏ di chuyển tất cả cùng nhau và thêm một kéo để di chuyển lựa chọn hoặc có thể là một tổ hợp phím CTRL và bánh xe chuột để phóng to và bánh xe chuột một mình sẽ kiểm soát di chuyển

đây là zoom của tôi chức năng (mà im hoàn hảo isnt biết) nhưng nếu có ai có thể làm sáng tỏ về rằng nó sẽ là một tiền thưởng

cổ vũ trước

void Test::wheelEvent(QWheelEvent *event) 
{ 
    if(event->delta() > 0) 
    { 
     ui->graphicsView->scale(2,2); 
    } 
    else 
    { 
     ui->graphicsView->scale(0.5,0.5); 
    } 
} 

Trả lời

4

bạn reimplemented wheelEvent cho QWidget/QMainWindow chứa QGraphicsView của bạn, làm thế nào bao giờ hết, wheelEvent của QGraphicsView vẫn còn nguyên vẹn.

Bạn có thể lấy được từ QGraphicsView, reimplement wheelEvent cho lớp dẫn xuất và sử dụng lớp dẫn xuất thay vì QGraphicsView - bằng cách này bạn thậm chí sẽ không cần wheelEvent trong QWidget/QMainWindow của bạn, và bạn có thể tùy chỉnh wheelEvent được thực hiện lại để làm những gì bạn muốn. Một cái gì đó như thế:

header file: tập tin

class myQGraphicsView : public QGraphicsView 
{ 
public: 
    myQGraphicsView(QWidget * parent = nullptr); 
    myQGraphicsView(QGraphicsScene * scene, QWidget * parent = nullptr); 

protected: 
    virtual void wheelEvent(QWheelEvent * event); 
}; 

Nguồn:

myQGraphicsView::myQGraphicsView(QWidget * parent) 
: QGraphicsView(parent) {} 

myQGraphicsView::myQGraphicsView(QGraphicsScene * scene, QWidget * parent) 
: QGraphicsView(scene, parent) {} 

void myQGraphicsView::wheelEvent(QWheelEvent * event) 
{ 
    // your functionality, for example: 
    // if ctrl pressed, use original functionality 
    if (event->modifiers() & Qt::ControlModifier) 
    { 
     QGraphicsView::wheelEvent(event); 
    } 
    // otherwise, do yours 
    else 
    { 
     if (event->delta() > 0) 
     { 
      scale(2, 2); 
     } 
     else 
     { 
      scale(0.5, 0.5); 
     } 
    } 
} 
1

Tôi nghĩ rằng câu hỏi của bạn có câu trả lời đơn giản hơn một chút .. Để vô hiệu hóa thanh cuộn chỉ cần thiết lập chính sách thanh cuộn (QGraphicsView chỉ là QScrollView), vì vậy bước 1)

setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 

sẽ vô hiệu thanh cuộn ..

bước 2) (nếu bạn muốn giữ nó đơn giản)

QGraphicsView * pView; // pointer to your graphics view 
pView->setInteractive(true); 
pView->setDragMode(QGraphicsView::ScrollHandDrag); 

thats cách nhanh nhất để có được kết quả mong muốn

+0

vâng, bạn có thể đúng, và như đã nêu trong câu trả lời trước, bạn nên thực hiện lại wheelEvent. Trong hầu hết các mã của tôi tôi thực hiện lại nó ngay từ đầu, vì vậy tôi không bao giờ mặc dù nó có chức năng cuộn =))) xin lỗi về điều đó – evilruff

3

cuộn có thể bị vô hiệu hóa với đoạn mã sau:

ui->graphicsView->verticalScrollBar()->blockSignals(true); 
    ui->graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
    ui->graphicsView->horizontalScrollBar()->blockSignals(true); 
    ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
Các vấn đề liên quan