qt 画矩形并拖动
在使用Qt进行图形界面开发时,常常需要在界面上绘制一些图形元素,并且希望用户能够通过鼠标拖动这些元素。本文将介绍如何使用Qt绘制矩形,并且实现拖动功能。
准备工作
在开始之前,确保已经安装了Qt开发环境。你可以从Qt官网下载并安装Qt Creator,这是一个集成了Qt库的IDE,非常适合用于Qt开发。
编写代码
首先,创建一个新的Qt Widgets应用程序项目。在Qt Creator中,选择File -> New File or Project
,然后选择Application -> Qt Widgets Application
。按照向导的指引完成项目的创建。
在MainWindow的.ui文件中,添加一个自定义的QWidget控件,名称可以设置为DrawWidget
,作为我们绘制矩形的区域。然后在MainWindow类的头文件中声明这个控件的指针:
// mainwindow.h
#include <QMainWindow>
#include "drawwidget.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
DrawWidget *drawWidget;
};
接着在MainWindow的类实现文件中创建DrawWidget对象,并设置为Central Widget:
// mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
drawWidget = new DrawWidget(this);
setCentralWidget(drawWidget);
}
MainWindow::~MainWindow()
{
delete drawWidget;
}
编写drawwidget.h
文件,用来定义绘制矩形和拖动的自定义控件:
// drawwidget.h
#include <QWidget>
#include <QMouseEvent>
#include <QPainter>
class DrawWidget : public QWidget
{
Q_OBJECT
public:
explicit DrawWidget(QWidget *parent = nullptr);
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *event);
private:
bool drawing;
QRect rectangle;
QPoint startPos;
};
接着在drawwidget.cpp
文件中实现这个自定义控件的功能:
// drawwidget.cpp
#include "drawwidget.h"
DrawWidget::DrawWidget(QWidget *parent) : QWidget(parent)
{
drawing = false;
}
void DrawWidget::mousePressEvent(QMouseEvent *event)
{
startPos = event->pos();
rectangle.setRect(startPos.x(), startPos.y(), 0, 0);
drawing = true;
}
void DrawWidget::mouseMoveEvent(QMouseEvent *event)
{
if (drawing) {
int width = event->x() - startPos.x();
int height = event->y() - startPos.y();
rectangle.setRect(startPos.x(), startPos.y(), width, height);
update();
}
}
void DrawWidget::mouseReleaseEvent(QMouseEvent *event)
{
if (drawing) {
drawing = false;
update();
}
}
void DrawWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawRect(rectangle);
}
运行效果
编译并运行项目,你会看到一个可绘制矩形并拖动的界面。通过鼠标点击并拖动,便可在DrawWidget上绘制出矩形,并且可以调整矩形的大小。