簡體   English   中英

在QGraphicsView中更改光標

[英]Changing the cursor in a QGraphicsView

我正在嘗試在ScrollHandDrag打開時更改QGraphicsView的光標,但它似乎不起作用。 我可以更改光標,如果我禁用ScrollHandDrag但不是在它處於活動狀態時,我不會看到我可能做錯了什么...

Bellow是重現問題的代碼的一部分:

QApplication app(argc, argv);
QGraphicsScene scene;
QRect rectangle(-8, -4, 100, 100);
QPen pen(Qt::blue, 1, Qt::SolidLine);
scene.addRect(rectangle, pen);
scene.setBackgroundBrush(Qt::white);
QGraphicsView vue(&scene);
vue.setFixedSize(250, 250);
//vue.setDragMode(QGraphicsView::ScrollHandDrag);
vue.setCursor(Qt::CrossCursor);
vue.show();

return app.exec();

QGraphicsView會在拖動時自動更改光標,但您可以通過重新實現一些功能輕松解決此問題:

class CoolView : public QGraphicsView
{
protected:
    void enterEvent(QEvent *event)
    {
        QGraphicsView::enterEvent(event);
        viewport()->setCursor(Qt::CrossCursor);
    }

    void mousePressEvent(QMouseEvent *event)
    {
        QGraphicsView::mousePressEvent(event);
        viewport()->setCursor(Qt::CrossCursor);
    }

    void mouseReleaseEvent(QMouseEvent *event)
    {
        QGraphicsView::mouseReleaseEvent(event);
        viewport()->setCursor(Qt::CrossCursor);
    }
};

從Qt的源代碼中探索,當你進入拖動模式並且沒有辦法阻止它們嘗試時,它們看起來就像控制了那個光標。

我所知道的唯一解決方法是使用QApplication::setOverrideCursor()QApplication::restoreOverrideCursor()來全局設置游標。 不幸的是,這意味着您必須對鼠標光標何時進入/離開QGraphicsView進行大量管理,以防止整個應用程序無法在任何地方卡住相同的光標。

還值得注意的是,光標設置在視口級別,因此更適合做vue.viewport()->setCursor(Qt::CrossCursor)

參考文件:

的QApplication :: setOverrideCursor

的QApplication :: restoreOverrideCursor

的QApplication :: changeOverrideCursor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM