拖拽如下控件:
然后实现效果:
圆形和矩形都可以移动,矩形、圆形就是图元,而图元放在我们创建的场景中,场景又透过多个视图来看到,其实可以理解成很多人偷窥你在吃饭的这个场景,饭和你这些角色就是图元。
在图形编程中,图元是指基本的绘图对象,如点、线、矩形、圆形等。它们是构成图形界面或图形图像的基本单元。
场景(Scene)是一个虚拟的绘图区域,可以将图元放置在其中。场景可以看作是一个容器,它管理和控制着图元的位置、变换、交互等操作。
视图(View)是用来展示场景中图元的窗口或其他图形显示设备。视图负责将场景中的图元渲染并显示在屏幕上,同时还可以处理用户的输入事件(如鼠标点击、键盘输入等)。
所以,可以将场景理解为一个包含图元的虚拟环境,而视图是用来观察和交互这个环境的窗口或设备。通过在场景中添加、移动、删除图元,同时通过视图来查看和操作,我们可以在图形界面中创建出丰富多样的图形效果和交互体验。
以下为实现代码:
.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QGraphicsScene>
#include <QGraphicsEllipseItem>
#include <QGraphicsRectItem>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButtonP_clicked();
void on_pushButtonN_clicked();
private:
Ui::Widget *ui;
QGraphicsScene* m_scene=nullptr;
QGraphicsEllipseItem* m_ellipse=nullptr;
QGraphicsRectItem* m_rect=nullptr;
};
#endif // WIDGET_H
.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
m_scene=new QGraphicsScene(this);
ui->graphicsView->setScene(m_scene);
QBrush m_redbrush(Qt::red);
QBrush m_bluebrush(Qt::blue);
QPen m_blackpen(Qt::black);
m_blackpen.setWidth(6);
m_ellipse=m_scene->addEllipse(10,10,100,100,m_blackpen,m_redbrush);
m_rect=m_scene->addRect(-100,-100,50,50,m_blackpen,m_bluebrush);
m_rect->setFlag(QGraphicsItem::ItemIsMovable);
m_ellipse->setFlag(QGraphicsItem::ItemIsMovable);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButtonP_clicked()
{
ui->graphicsView->rotate(10);
}
void Widget::on_pushButtonN_clicked()
{
ui->graphicsView->rotate(-1);
}