Abh*_*hek 6 qt4 qgraphicsview qgraphicsscene
我有一个QGraphicsScene我添加了一些实例QGraphicsItem.
我需要在各个视图中显示整个场景的特定部分.
为此,我想创建多个实例,QGraphicsView每个实例显示我的特定部分QGraphicsScene(不是类似的部分).
怎么做到呢?
QGraphicsScene mcpGraphicsScene = new QGraphicsScene(this);
QGraphicsRectItem * mcpGraphicsRect = mcpGraphicsScene->addRect(5,5,200,200);
QGraphicsLineItem * mcpGraphicsLine = mcpGraphicsScene->addLine(500,500,300,300);
QGraphicsView * mcpGraphicsView1 = new QGraphicsView(this);
mcpGraphicsView1->setScene(mcpGraphicsScene);
mcpGraphicsView1->setGeometry(260,20,311,500);
QGraphicsView * mcpGraphicsView2 = new QGraphicsView(this);
mcpGraphicsView2->setScene(mcpGraphicsScene);
mcpGraphicsView2->setGeometry(260,520,311,1061);
Run Code Online (Sandbox Code Playgroud)
您使用了错误的函数,您使用的是 setGeometry,它告诉 View 应该相对于其父级(即小部件,而不是场景)放置它的位置。要定义视图负责显示的场景区域,您需要调用使用setSceneRect
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QLayout>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QHBoxLayout* myLayout = new QHBoxLayout(this);
QGraphicsScene* mcpGraphicsScene = new QGraphicsScene(this);
mcpGraphicsScene->addRect(5,5,200,200);
mcpGraphicsScene->addLine(500,500,300,300);
QGraphicsView * mcpGraphicsView1 = new QGraphicsView(mcpGraphicsScene, this);
mcpGraphicsView1->setSceneRect(0,0,150,150);
QGraphicsView * mcpGraphicsView2 = new QGraphicsView(mcpGraphicsScene, this);
mcpGraphicsView2->setSceneRect(0,150,600,600);
myLayout->addWidget(mcpGraphicsView1);
myLayout->addWidget(mcpGraphicsView2);
QWidget *window = new QWidget();
window->setLayout(myLayout);
setCentralWidget(window);
}
MainWindow::~MainWindow()
{
delete ui;
}
Run Code Online (Sandbox Code Playgroud)