QGraphicsView 自定义滚动条
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QGraphicsView 自定义滚动条相关的知识,希望对你有一定的参考价值。
参考技术A 目的 写了个QGraphicsView的子类MyGraphicsView,构造函数添加 Scene,在Scene添加ietm 多的时候,MyGraphicsView上会出现滚动条,由于 我得在滚动条 滑动的时候 响应 一个方法, 操作我添加的ietm。开始我我想的重写 QGraphicsView 的滚动条 事件。 但发现没有 。
在view的构造函数添加
connect(this->horizontalScrollBar();, SIGNAL(sliderMoved(int)), this, SLOT(onMyScrollMoved()));
//在槽函数 onMyScrollMoved 编辑 自己操作。
但发现 在滚动条山 使用滑轮滚动 该槽函数不响应。重写QScrollBar, myQScrollBar
在myQScrollBar类中重写 wheelEvent(QWheelEvent *event) 虚函数;
void myQScrollBar::wheelEvent(QWheelEvent *event)
int aa = event->orientation() ;
//if( Qt::Horizontal == event->orientation() ) //不加 #include <QtWidgets> 编译不过
if( Qt::Vertical == event->orientation() ) //但 这里永远是垂直的, 暂时没有研究
emit scrollWheel();
event->accept();
QScrollBar::wheelEvent(event);
最后在view的构造函数添加
myQScrollBar* pScroll = new myQScrollBar();
this->setHorizontalScrollBar(pScroll);
connect(pScroll, SIGNAL(sliderMoved(int)), this, SLOT(onMyScrollMoved()));
connect(pScroll, SIGNAL(scrollWheel()), this, SLOT(onMyScrollMoved()));
参考
http://www.voidcn.com/article/p-wagtfmud-bvw.html
https://www.cnblogs.com/doubleeleven/articles/3753867.html
QGraphicsView 滚动条策略未按预期工作
【中文标题】QGraphicsView 滚动条策略未按预期工作【英文标题】:QGraphicsView scroll bar policy not working as expected 【发布时间】:2012-04-16 17:55:19 【问题描述】:我有一个垂直滚动条策略为“ScrollBarAlwaysOff”的 QGraphicsView。问题是当我调整视图的大小时(通过 QSplitter 或仅通过调整窗口的大小),视图的右侧经常会出现一个空白区域。这是一个带有红色背景和黑色 QGraphicsRectItem 的示例:
#include <QtGui>
class MainWindow : public QMainWindow
public:
MainWindow()
QGraphicsScene *scene = new QGraphicsScene(this);
QRectF rect(-100, -100, 200, 200);
QGraphicsRectItem *rectItem = new QGraphicsRectItem(rect);
rectItem->setBrush(QBrush(Qt::black));
scene->addItem(rectItem);
scene->setSceneRect(rect); //commenting this out doesn't make a difference
QGraphicsView *view = new QGraphicsView(this);
view->setBackgroundBrush(QBrush(Qt::red));
view->setTransformationAnchor(QGraphicsView::AnchorViewCenter);
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->setScene(scene);
setCentralWidget(view);
;
int main(int argc, char *argv[])
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
问题如下:
我该如何解决这个问题?
编辑:点击这里将图片放大一点:http://i.stack.imgur.com/HeWHJ.png
【问题讨论】:
不幸的是,我无法在 PyQt 中重现这种行为。使用 PyQt 4.9.1 和 Qt 4.8.1。对我来说,当它小于 QGraphicsItem 大小时,我会得到恒定的黑色。显然,当它大于 QGraphicItem 大小时是红色 @jdi 感谢您检查它。我正在使用 4.8.0。我会更新到 4.8.1 看看能不能解决。 【参考方案1】:我试了一下,发现如果将矩形更改为 (0, 0, 300, 300),它可以正常工作。似乎QGraphicsView
在处理带有负左上场景矩形的滚动条更新时遇到问题。您应该向 Qt 提交错误报告。
【讨论】:
你在哪个版本的 Qt 上测试过这个?我在 4.8.1 中根本没有看到这个问题 这确实为我解决了问题。很奇怪。正如@jdi 提到的,这可能是版本问题。如果我更新后它仍然存在,我会将其报告为错误(并在此处)。 是的。它现在处于 4.8.1 和 5.0 alpha 版本中。至少在 C++ 绑定上。 我猜python绑定以某种方式解决了这个问题。奇怪的是,它仍然在下面使用相同的 c++以上是关于QGraphicsView 自定义滚动条的主要内容,如果未能解决你的问题,请参考以下文章