QGraphicsView根据中心绘制交叉C++
时间: 2023-09-11 08:09:02 浏览: 137
要在QGraphicsView中绘制一个交叉,可以创建一个QGraphicsItem子类,并在其paint()函数中绘制交叉。然后将此项添加到场景中,并将场景设置为QGraphicsView的场景。以下是一个简单的示例:
CrossItem.h:
```
#ifndef CROSSITEM_H
#define CROSSITEM_H
#include <QGraphicsItem>
class CrossItem : public QGraphicsItem
{
public:
explicit CrossItem(QGraphicsItem *parent = nullptr);
QRectF boundingRect() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
};
#endif // CROSSITEM_H
```
CrossItem.cpp:
```
#include "CrossItem.h"
#include <QPainter>
CrossItem::CrossItem(QGraphicsItem *parent) : QGraphicsItem(parent)
{
}
QRectF CrossItem::boundingRect() const
{
return QRectF(-50, -50, 100, 100); // 交叉的矩形范围
}
void CrossItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setRenderHint(QPainter::Antialiasing); // 抗锯齿
painter->setPen(QPen(Qt::red, 2)); // 设置画笔颜色和线宽
painter->drawLine(-50, 0, 50, 0); // 绘制交叉
painter->drawLine(0, -50, 0, 50);
}
```
在主窗口中创建一个QGraphicsView和场景,并将CrossItem添加到场景中:
MainWindow.h:
```
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QGraphicsView>
#include <QGraphicsScene>
#include "CrossItem.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QGraphicsView *view;
QGraphicsScene *scene;
CrossItem *crossItem;
};
#endif // MAINWINDOW_H
```
MainWindow.cpp:
```
#include "MainWindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
view = new QGraphicsView(this);
setCentralWidget(view);
scene = new QGraphicsScene(this);
view->setScene(scene);
crossItem = new CrossItem();
scene->addItem(crossItem);
}
MainWindow::~MainWindow()
{
}
```
运行程序后,应该可以在QGraphicsView中看到一个红色的交叉。你可以根据需要调整CrossItem类中的boundingRect()函数返回的矩形范围和paint()函数中绘制交叉的位置和大小。
阅读全文