当前位置: 首页> 汽车> 报价 > 网页版传奇工作室_海南小程序开发_如何自己搭建网站_制作一个网页的步骤

网页版传奇工作室_海南小程序开发_如何自己搭建网站_制作一个网页的步骤

时间:2025/7/20 17:25:10来源:https://blog.csdn.net/weixin_58038211/article/details/143249794 浏览次数: 0次
网页版传奇工作室_海南小程序开发_如何自己搭建网站_制作一个网页的步骤

目录

QPainter 

QPainter 的一些关键步骤和使用方法:

QPainter 的一些常用接口:

1. 基础绘制接口

2. 颜色和画刷设置

3. 图像绘制

4. 文本绘制

5. 变换操作

6. 渲染设置

7. 状态保存与恢复

8. 其它绘制方法

示例代码1:

示例代码2(音乐播放旋转效果):


QPainter 

QPainter 是 Qt 提供的一个用于绘图的类。它能够在窗口、图像、打印机等设备上进行绘图操作,可以绘制线条、形状、文字、图像等内容。QPainter 通常在窗口的 paintEvent 中使用。

QPainter 的一些关键步骤和使用方法:

  1. 在 paintEvent 中使用 QPainter
    当需要绘图时,一般会重写 paintEvent 方法,在此方法中使用 QPainter 进行绘图。

  2. 开始绘图
    创建一个 QPainter 对象并将其绑定到一个绘图设备(如 QWidget 或 QImage)。

  3. 设置画笔和画刷
    可以使用 QPen 来设置线条的颜色、宽度、样式等;使用 QBrush 设置填充样式。

  4. 绘制图形
    使用 QPainter 的绘图方法,比如 drawLine()drawRect()drawText()drawEllipse()drawImage() 等。

  5. 结束绘图
    QPainter 使用结束后,需要调用 end() 或让 QPainter 对象自动析构。

QPainter 的一些常用接口:

 QPainter 是 Qt 中的一个关键类,用于在窗口、小部件或图像上绘制图形。它提供了丰富的接口来绘制各种图形元素,如直线、矩形、圆、文本和图片等。

以下是 QPainter 的一些常用接口和它们的用途。

1. 基础绘制接口

  • drawLine(const QPoint &p1, const QPoint &p2):绘制从点 `p1` 到点 `p2` 的直线。
painter.drawLine(QPoint(10, 10), QPoint(100, 100));
  • drawRect(int x, int y, int width, int height):绘制一个矩形,指定位置和尺寸。
  painter.drawRect(20, 20, 100, 50);
  • drawEllipse(int x, int y, int width, int height):绘制一个椭圆或圆,指定左上角和尺寸。
  painter.drawEllipse(50, 50, 80, 80);
  • drawPolygon(const QPolygon &polygon):绘制一个多边形,可以通过 `QPolygon` 指定顶点。
  QPolygon polygon;polygon << QPoint(60, 80) << QPoint(90, 20) << QPoint(130, 90);painter.drawPolygon(polygon);

2. 颜色和画刷设置

  • setPen(const QPen &pen):设置画笔,用于线条、边框和文本等的颜色和样式。
  QPen pen(Qt::red);pen.setWidth(2);painter.setPen(pen);
  • setBrush(const QBrush &brush):设置画刷,用于填充图形的颜色或纹理。
  painter.setBrush(QBrush(Qt::blue, Qt::SolidPattern));painter.drawRect(50, 50, 100, 100);

3. 图像绘制

  • drawPixmap(int x, int y, const QPixmap &pixmap):在指定位置绘制图像。
  QPixmap pixmap(":/images/example.png");painter.drawPixmap(100, 100, pixmap);
  • drawImage(const QRect &rectangle, const QImage &image):在矩形区域内绘制图像,支持更丰富的图像格式(如 JPG、PNG 等)。
  QImage image(":/images/example.jpg");painter.drawImage(QRect(150, 150, 100, 100), image);

4. 文本绘制

  • drawText(int x, int y, const QString &text):在指定坐标处绘制文本。
  painter.drawText(200, 200, "Hello, Qt!");
  • drawText(const QRect &rectangle, int flags, const QString &text):在指定矩形区域内绘制文本,并设置对齐方式。
 painter.drawText(QRect(100, 100, 200, 50), Qt::AlignCenter, "Centered Text");

5. 变换操作

  • translate(int dx, int dy):平移当前坐标系。
  painter.translate(50, 50);  // 将原点向右下平移50像素
  • rotate(qreal angle):旋转当前坐标系,单位是角度。
  painter.rotate(45);  // 顺时针旋转45度
  • scale(qreal sx, qreal sy):缩放当前坐标系。
  painter.scale(1.5, 1.5);  // 将坐标系放大1.5倍

6. 渲染设置

  • setRenderHint(QPainter::RenderHint hint, bool on = true):设置渲染提示以增强图形效果,例如抗锯齿、平滑等。
  painter.setRenderHint(QPainter::Antialiasing);  // 启用抗锯齿
  • setOpacity(qreal opacity):设置不透明度,用于实现透明效果,取值范围为 `0.0`(完全透明)到 `1.0`(完全不透明)。
  painter.setOpacity(0.5);  // 设置50%透明度

7. 状态保存与恢复

save()restore():用于保存和恢复 QPainter 的状态。在进行复杂绘图时,这两个方法非常实用,可以在修改设置后轻松恢复原来的状态。

  painter.save();painter.setPen(Qt::red);painter.drawLine(0, 0, 100, 100);painter.restore();  // 恢复到原来的设置

8. 其它绘制方法

  • drawArc(const QRect &rect, int startAngle, int spanAngle):绘制圆弧。
 painter.drawArc(QRect(100, 100, 80, 80), 30 * 16, 120 * 16);  // 角度以1/16度为单位
  • drawChord(const QRect &rect, int startAngle, int spanAngle):绘制弦形区域(即部分封闭的圆弧)。
  painter.drawChord(QRect(150, 150, 80, 80), 30 * 16, 120 * 16);
  • drawPie(const QRect &rect, int startAngle, int spanAngle):绘制扇形区域。
  painter.drawPie(QRect(200, 200, 80, 80), 45 * 16, 90 * 16);

示例代码1:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMainWindow>
#include <QPainter>
#include <QPaintEvent>
#include <QTimer>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();protected:void paintEvent(QPaintEvent *);
};
#endif // MAINWINDOW_H

mainwindow.c

#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{this->setGeometry(0, 0, 800, 480);
}MainWindow::~MainWindow() {
}void MainWindow::paintEvent(QPaintEvent *) {QPainter painter(this); //this指本窗口painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); //设置抗锯齿,流畅转换// 绘制矩形painter.setPen(Qt::blue);painter.setBrush(Qt::yellow);painter.drawRect(10, 10, 100, 50);// 绘制圆painter.setBrush(Qt::green);painter.drawEllipse(150, 10, 80, 80);// 绘制文本painter.setPen(Qt::black);painter.drawText(50, 150, "Hello, QPainter!");// 绘制图像QPixmap pixmap(":/image/cd.png");painter.drawPixmap(200, 150, pixmap.scaled(80, 80, Qt::KeepAspectRatio, Qt::SmoothTransformation));}

运行效果:

示例代码2(音乐播放旋转效果):

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMainWindow>
#include <QPainter>
#include <QPaintEvent>
#include <QTimer>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();protected:void paintEvent(QPaintEvent *);
private:QTimer *timer; //定时器int angle;private slots:void timerTimeOut();
};
#endif // MAINWINDOW_H

mainwindow.c

#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{this->setGeometry(0, 0, 800, 480);angle = 0;timer = new QTimer(this);timer->start(100); //定时100msconnect(timer, SIGNAL(timeout()), this, SLOT(timerTimeOut()));
}MainWindow::~MainWindow() {
}void MainWindow::timerTimeOut() {this->update();
}void MainWindow::paintEvent(QPaintEvent *) {QPainter painter(this); //this指本窗口painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); //设置抗锯齿,流畅转换if (angle++ == 360)angle = 0;QPixmap image; // QPixmap类型对象image.load(":/image/cd.png"); //加载图片//QRectF即,继承QRect(Qt的矩形类),F代表精确到浮点类型QRectF rect((this->width() - image.width()) / 2,(this->height() - image.height()) / 2,image.width(),image.height());painter.translate(0 + rect.x() + rect.width() / 2,0 + rect.y() + rect.height() / 2);painter.rotate(angle); //旋转角度painter.translate(0 - (rect.x() + rect.width() / 2),0 - (rect.y() + rect.height() / 2));painter.drawImage(rect, image.toImage(), image.rect());painter.drawRect(rect.toRect());}

注:

void MainWindow::timerTimeOut() {this->update();
}

this->update()是在 Qt 中用于刷新或重绘窗口的一种方法。调用 update() 时,Qt 会将该窗口标记为需要重绘,在下一个事件循环周期触发 paintEvent() 方法,从而重新绘制窗口内容。

QRectF rect((this->width() - image.width()) / 2, (this->height() - image.height()) / 2, image.width(), image.height());
  • rect 定义了一个矩形区域,其大小等于 image 的宽和高,位置设置为窗口的中心位置。
  • (this->width() - image.width()) / 2 和 (this->height() - image.height()) / 2 计算出图像居中显示时的左上角坐标。
painter.translate(0 + rect.x() + rect.width() / 2, 0 + rect.y() + rect.height() / 2);
  • painter.translate() 将 QPainter 的原点平移到 rect 的中心。
  • rect.x() 和 rect.y() 分别是 rect 左上角的 x 和 y 坐标,rect.width() /2 和 rect.height() / 2 则将坐标移动到 rect 的中心位置。

运行效果(每隔100ms图片旋转一次):

关键字:网页版传奇工作室_海南小程序开发_如何自己搭建网站_制作一个网页的步骤

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: