为什么使用QGraphicsView::scale, 当scale的参数小于1时我的QGraphicsScene上的item就全部消失了?
当scale的参数大于1时可以正确放大,但是scale的参数小于1时我的QGraphicsScene上的item就全部消失了?
求指教
部分代码如下:
求指教
部分代码如下:
#include "iitems.h"
#include <QtGui>
#include "Link.h"
#include "Node.h"
#include "propertiesdialog.h"
#include <QWidget>
extern float Xmax,Ymax;
extern int VisZoom;
extern float iData[6376][3];
extern float xx,yy;
iItems::iItems()
{
QSplitter *MainSplitter = new QSplitter(Qt::Horizontal);
QSplitter * WidgetRight = new QSplitter(Qt::Vertical);
QWidget *SubWidget1 = new QWidget;
QWidget *SubWidget2 = new QWidget;
//QWidget *area= new QWidget;
view = new QGraphicsView;
spinBox1 = new QSpinBox;
QSlider *slider1 = new QSlider(Qt::Horizontal);
spinBox1->setRange(1, 9);
spinBox1->setValue(1);
SpinBoxValue1=spinBox1->value();
VisZoom=10;
slider1->setRange(1, 9);
QObject::connect(spinBox1, SIGNAL(valueChanged(int)),
slider1, SLOT(setValue(int)));
QObject::connect(slider1, SIGNAL(valueChanged(int)),
spinBox1, SLOT(setValue(int)));
QObject::connect(spinBox1, SIGNAL(valueChanged(int)),
this, SLOT(setVisZoom()));
QHBoxLayout *layout1 = new QHBoxLayout;
layout1->addWidget(spinBox1);
layout1->addWidget(slider1);
SubWidget1->setLayout(layout1);
QSpinBox *spinBox2 = new QSpinBox;
QSlider *slider2 = new QSlider(Qt::Horizontal);
spinBox2->setRange(0, 130);
spinBox2->setValue(25);
slider2->setRange(0, 130);
QObject::connect(spinBox2, SIGNAL(valueChanged(int)),
slider2, SLOT(setValue(int)));
QObject::connect(slider2, SIGNAL(valueChanged(int)),
spinBox2, SLOT(setValue(int)));
QHBoxLayout *layout2 = new QHBoxLayout;
layout2->addWidget(spinBox2);
layout2->addWidget(slider2);
SubWidget2->setLayout(layout2);
WidgetRight->addWidget(SubWidget1);
WidgetRight->addWidget(SubWidget2);
MainSplitter->addWidget(view);
MainSplitter->addWidget(WidgetRight);
view->setDragMode(QGraphicsView::RubberBandDrag);// 选择多个节点方式:1.按ctrl;2.设置橡皮筋方式
view->setRenderHints(QPainter::Antialiasing
| QPainter::TextAntialiasing);
view->setContextMenuPolicy(Qt::ActionsContextMenu);// 右键菜单
setCentralWidget(MainSplitter);
scene = new QGraphicsScene(0, 0, Xmax*VisZoom, Ymax*VisZoom);// 创建场景,起始点为(0,0), 宽600,高500
view->setScene(scene);// 显示场景
view->setStyleSheet("background-color:gray");
minZ = 0;
maxZ = 0;
seqNumber = 0;
createActions();
createMenus();
createToolBars();
connect(scene, SIGNAL(selectionChanged()),
this, SLOT(updateActions()));
setWindowTitle(tr("Diagram"));
updateActions();
}
// 增加一个节点
void iItems::addNode1()
{
Node *node = new Node;
node->setText(tr("Node %1").arg(seqNumber + 1));
setupNode1(node);
}
void iItems::setupNode1(Node *node)
{
node->setPos(QPoint(80 + (100 * (seqNumber % 5)),
80 + (50 * ((seqNumber / 5) % 7))));
scene->addItem(node);
++seqNumber;
scene->clearSelection();
node->setSelected(true);
bringToFront();
}
void iItems::bringToFront()
{
++maxZ;
setZValue(maxZ);
}
void iItems::sendToBack()
{
--minZ;
setZValue(minZ);
}
void iItems::setZValue(int z)
{
Node *node = selectedNode();
if (node)
node->setZValue(z);
}
Node *iItems::selectedNode() const
{
QList<QGraphicsItem *> items = scene->selectedItems();
if (items.count() == 1) {
return dynamic_cast<Node *>(items.first());
} else {
return 0;
}
}
void iItems::addLink()
{
NodePair nodes = selectedNodePair();
if (nodes == NodePair())
return;
Link *link = new Link(nodes.first, nodes.second);
scene->addItem(link);
}
...全文
相关推荐
Qt 图片缩放,支持滚轮和按键缩放
Qt5.3.2 实现的图片缩放,支持滚轮和按键缩放,复位,切换图片
图论可视化认知系统:用Python+NetworkX+PyQt5让算法过程看得见
图论是离散数学的重要分支,其算法过程高度依赖抽象思维,而传统静态板书难以呈现动态执行逻辑,常导致学习者出现认知断层。算法可视化技术通过将计算过程转化为可观察的动画,成为化解这一难题的有效手段。其核心原理是“步骤记录+状态机播放”:将算法拆解为一系列状态迁移事件,再交由图形界面逐帧渲染,从而实现过程的回放、暂停与回溯。这种可视化认知工具在计算机教学、自学和课程设计中具有重要价值,能帮助学习者建立从抽象概念到具体执行的直观映射。本文综合运用Python、NetworkX和PyQt5,介绍一套开源图论可视化认知系
Qt opengl Qgraphcsview scene item
自己在学习 Opengl QGraphicsview scene item 的时候的一点代码 主要有雷达余晖效果 view分成处理 任意图形绘制 图片加载 等
Qt_图像放大缩小拖动功能.rar
图像滚轮放大缩小及单击拖动,Qt源码打包 效果预览:https://blog.csdn.net/a2583211/article/details/93486015
QGraphicsView以鼠标点实现放大缩小、拖拽
实现图像的缩小、放大、拖拽功能


