我的小部件上有一个QGraphicsView窗口,只是放入一个鼠标滚轮的事件,放大图像.
但是,只要我放大滚动条,鼠标滚轮上的滚动功能就会覆盖我的缩放功能.
我想知道是否有任何方法,我可以删除所有在一起滚动并添加拖动移动选项或可能CTRL和鼠标滚轮缩放和单独的鼠标滚轮将控制滚动
这是我的缩放功能(我意识到并不完美),但如果有人可以说明这将是一个奖金
提前喝彩
void Test::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
{
ui->graphicsView->scale(2,2);
}
else
{
ui->graphicsView->scale(0.5,0.5);
}
}
Run Code Online (Sandbox Code Playgroud)
您为包含 QGraphicsView 的 QWidget/QMainWindow 重新实现了wheelEvent,但是,QGraphicsView 的wheelEvent 保持不变。
您可以从 QGraphicsView 派生,为派生类重新实现wheelEvent 并使用派生类而不是QGraphicsView - 这样您甚至不需要在QWidget/QMainWindow 中使用wheelEvent,并且您可以自定义重新实现的wheelEvent 来执行您想要的操作。类似的东西:
头文件:
class myQGraphicsView : public QGraphicsView
{
public:
myQGraphicsView(QWidget * parent = nullptr);
myQGraphicsView(QGraphicsScene * scene, QWidget * parent = nullptr);
protected:
virtual void wheelEvent(QWheelEvent * event);
};
Run Code Online (Sandbox Code Playgroud)
源文件:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以使用以下代码禁用滚动:
ui->graphicsView->verticalScrollBar()->blockSignals(true);
ui->graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->graphicsView->horizontalScrollBar()->blockSignals(true);
ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5621 次 |
| 最近记录: |