qt 做一个简单的画图程序,基本功能: 1) 按“L”后,用鼠标拖拽能在屏幕上画直线; 2) 按“E”后,用鼠标托拽能在屏幕上画矩形 3) 按“C”后,用鼠标拖拽能在屏幕上画圆 4) 按“R”“G”“B”能够改变所画图形为红、绿、蓝色
时间: 2023-11-19 10:04:32 浏览: 101
首先,我们需要创建一个新的 Qt 项目,并添加一个 QWidget 对象作为主界面。然后,我们可以重写 QWidget 的 paintEvent() 方法,以便在屏幕上绘制所需的形状。
下面是一个简单的实现:
```cpp
#include <QtGui>
class DrawingWidget : public QWidget
{
public:
DrawingWidget(QWidget *parent = 0);
protected:
void paintEvent(QPaintEvent *event);
void keyPressEvent(QKeyEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private:
int shapeType;
QColor penColor;
QPen pen;
QImage image;
QPoint lastPoint;
bool isDrawing;
};
DrawingWidget::DrawingWidget(QWidget *parent)
: QWidget(parent), shapeType(0), penColor(Qt::black), pen(penColor, 2),
image(400, 400, QImage::Format_RGB32), isDrawing(false)
{
image.fill(Qt::white);
}
void DrawingWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawImage(event->rect(), image, event->rect());
}
void DrawingWidget::keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_L:
shapeType = 0;
break;
case Qt::Key_E:
shapeType = 1;
break;
case Qt::Key_C:
shapeType = 2;
break;
case Qt::Key_R:
penColor = Qt::red;
pen.setColor(penColor);
break;
case Qt::Key_G:
penColor = Qt::green;
pen.setColor(penColor);
break;
case Qt::Key_B:
penColor = Qt::blue;
pen.setColor(penColor);
break;
default:
QWidget::keyPressEvent(event);
}
}
void DrawingWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
lastPoint = event->pos();
isDrawing = true;
}
}
void DrawingWidget::mouseMoveEvent(QMouseEvent *event)
{
if (isDrawing) {
QPainter painter(&image);
painter.setPen(pen);
switch (shapeType) {
case 0:
painter.drawLine(lastPoint, event->pos());
break;
case 1:
painter.drawRect(QRect(lastPoint, event->pos()));
break;
case 2:
painter.drawEllipse(QRect(lastPoint, event->pos()));
break;
}
lastPoint = event->pos();
update();
}
}
void DrawingWidget::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
isDrawing = false;
}
}
```
在这个实现中,我们使用了一个 QImage 对象来保存绘制的图像,并在 paintEvent() 方法中将其绘制到屏幕上。我们还重写了键盘和鼠标事件处理程序,以便根据所按下的键或鼠标操作绘制不同的形状或更改画笔颜色。最后,我们使用 QPainter 对象在 mouseMoveEvent() 中绘制所需的形状,并在 mouseReleaseEvent() 中停止绘制。
最后一步是在主函数中创建 DrawingWidget 对象,并将其设置为应用程序的主窗口:
```cpp
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
DrawingWidget widget;
widget.show();
return app.exec();
}
```
现在,当用户按下 L、E 或 C 键时,他们可以使用鼠标在屏幕上绘制直线、矩形或圆形。当用户按下 R、G 或 B 键时,所绘制的形状将变成红色、绿色或蓝色。
阅读全文