以下是一个简单的Qt QGraphicsView绘制多边形C++代码示例:
首先,您需要在Qt Creator中创建一个新的Qt Widgets应用程序项目,并添加一个QGraphicsView小部件。
在您的主窗口头文件中,添加以下包含语句和前置声明:
#include <QGraphicsScene>
#include <QGraphicsView>
class QMouseEvent;
class QPainterPath;
class QGraphicsPolygonItem;
- 然后,在主窗口类中声明以下私有成员变量:
private:
bool m_isDrawing; // 是否正在绘制
QPointF m_lastPos; // 上一次鼠标位置
QGraphicsPolygonItem* m_polygonItem; // 多边形项
QGraphicsScene* m_scene; // 场景对象
- 在您的主窗口构造函数中初始化这些变量,并设置场景为QGraphicsView的场景:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
m_isDrawing = false;
m_lastPos = QPointF();
m_polygonItem = new QGraphicsPolygonItem();
QPen pen(Qt::black, 2);
QBrush brush(Qt::NoBrush);
m_polygonItem->setPen(pen);
m_polygonItem->setBrush(brush);
m_scene = new QGraphicsScene(this);
ui.graphicsView->setScene(m_scene);
}
- 接下来,重写鼠标事件处理程序以响应用户输入。在鼠标按下事件中,开始绘制多边形并将m_isDrawing设置为true。在鼠标移动事件中,更新多边形并重新绘制场景。在释放鼠标事件中,停止绘制多边形并将m_isDrawing设置为false。
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_lastPos = event->pos();
if (!m_isDrawing) {
m_polygonItem->setPolygon(QPolygonF(m_lastPos));
m_scene->addItem(m_polygonItem);
m_isDrawing = true;
}
else {
QPolygonF polygon = m_polygonItem->polygon();
polygon.append(m_lastPos);
m_polygonItem->setPolygon(polygon);
}
}
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if ((event->buttons() & Qt::LeftButton) && m_isDrawing) {
QPointF newPos = event->pos();
QPolygonF polygon = m_polygonItem->polygon();
polygon.replace(polygon.size() - 1, newPos);
m_polygonItem->setPolygon(polygon);
}
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton && m_isDrawing) {
QPointF newPos = event->pos();
QPolygonF polygon = m_polygonItem->polygon();
polygon.replace(polygon.size() - 1, newPos);
m_polygonItem->setPolygon(polygon);
ui.graphicsView->viewport()->update(); // 更新视口以清除残留的轨迹
m_isDrawing = false;
}
}
- 最后,您可以添加一些其他功能,例如设置画笔颜色和填充颜色:
void MainWindow::on_penColorButton_clicked()
{
QColor color = QColorDialog::getColor(Qt::black, this);
if (color.isValid()) {
QPen pen(color, 2);
m_polygonItem->setPen(pen);
}
}
void MainWindow::on_fillColorButton_clicked()
{
QColor color = QColorDialog::getColor(Qt::white, this);
if (color.isValid()) {
QBrush brush(color);
m_polygonItem->setBrush(brush);
}
}
这是一个非常基本的Qt QGraphicsView绘制多边形C++代码示例。您可以根据需要对其进行修改和扩展。