QT基础篇(6)QT5图形与图片

1.QT5位置相关函数

在Qt5中,有一些与位置相关的函数可以帮助您处理窗口和控件的位置。下面是一些常用的位置相关函数:

  1. move(x, y): 将窗口或控件移动到屏幕上的指定位置,其中x和y表示要移动到的坐标。

  2. resize(width, height): 调整窗口或控件的大小,其中width和height表示新的宽度和高度。

  3. geometry(): 返回窗口或控件的几何数据,包括位置和大小。

  4. pos(): 返回窗口或控件的当前位置。

  5. size(): 返回窗口或控件的当前大小。

  6. setGeometry(x, y, width, height): 同时设置窗口或控件的位置和大小。

  7. setFixedSize(width, height): 设置窗口或控件的固定大小,禁止用户调整大小。

  8. mapToGlobal(point): 将窗口或控件坐标系中的点映射到全局坐标系中。

  9. mapFromGlobal(point): 将全局坐标系中的点映射到窗口或控件坐标系中。

这些函数可以帮助您控制窗口和控件的位置和大小,从而实现更好的用户界面布局。

2.QT5基础图形的绘制

在QT5中,可以使用QPainter类来绘制基础图形。下面是一些常见的基础图形绘制操作:

  1. 绘制直线:

    cpp 复制代码
    QPainter painter(this);
    painter.drawLine(QPointF(10, 10), QPointF(50, 50));
  2. 绘制矩形:

    cpp 复制代码
    QPainter painter(this);
    painter.drawRect(QRect(20, 20, 50, 50));
  3. 绘制椭圆:

    cpp 复制代码
    QPainter painter(this);
    painter.drawEllipse(QRect(20, 20, 50, 50));
  4. 绘制圆弧:

    cpp 复制代码
    QPainter painter(this);
    painter.drawArc(QRect(20, 20, 50, 50), 0, 180 * 16);
  5. 绘制多边形:

    cpp 复制代码
    QPainter painter(this);
    QVector<QPoint> points;
    points << QPoint(10, 10) << QPoint(50, 10) << QPoint(50, 50) << QPoint(10, 50);
    painter.drawPolygon(points);
  6. 绘制曲线:

    cpp 复制代码
    QPainter painter(this);
    QPainterPath path;
    path.moveTo(10, 10);
    path.cubicTo(40, 30, 80, 80, 120, 40);
    painter.drawPath(path);

以上代码中, this 表示绘制的目标窗口,可以根据实际情况修改为其他绘制目标。

绘制操作完成后,通过调用 QPainter::end() 方法来结束绘制过程。

3.Qt5 双缓冲机制

在Qt5中,双缓冲机制可以通过使用QWidget::setDoubleBuffered(true)函数来启用。

双缓冲机制是一种绘图优化技术,用于避免屏幕闪烁和绘图锯齿等问题。在双缓冲机制下,绘图操作首先在一个隐藏的缓冲区进行,之后再将整个缓冲区绘制到屏幕上,从而实现平滑的绘图效果。

下面是一个使用双缓冲机制的示例:

cpp 复制代码
#include <QApplication>
#include <QWidget>
#include <QPainter>

class MyWidget : public QWidget
{
public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent)
    {
        setDoubleBuffered(true);
    }

protected:
    void paintEvent(QPaintEvent *event) override
    {
        QPainter painter(this);

        // 在缓冲区绘制图形
        QPainter bufferPainter(&buffer);
        bufferPainter.fillRect(rect(), Qt::white);
        bufferPainter.drawText(rect(), Qt::AlignCenter, "Hello, World!");

        // 将缓冲区绘制到屏幕上
        painter.drawImage(rect(), buffer);
    }

private:
    QImage buffer;
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MyWidget widget;
    widget.show();

    return app.exec();
}

在上述示例中,我们通过将缓冲区的图像绘制到屏幕上,来避免直接在屏幕上进行绘图操作。这样可以减少对屏幕资源的频繁访问,以及减少屏幕的闪烁和锯齿效应。

注意,在使用双缓冲机制时,要确保在每次绘图操作后都调用QWidget::update()函数来触发重绘事件,以便将缓冲区的内容绘制到屏幕上。

4.显示QT5 SVG格式图片

在Qt5中,可以使用QSvgWidget来显示SVG格式的图片。以下是一个示例:

cpp 复制代码
#include <QApplication>
#include <QSvgWidget>
#include <QFile>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建并设置QSvgWidget
    QSvgWidget svgWidget;
    svgWidget.show();

    // 加载SVG文件
    QFile file("image.svg");
    if (file.open(QIODevice::ReadOnly))
    {
        svgWidget.load(&file);
        file.close();
    }

    return app.exec();
}

在上述示例中,通过创建一个QSvgWidget并调用它的load函数来加载SVG文件。你需要将SVG文件的路径指定为正确的位置。一般情况下,SVG文件可以通过QFile类来读取。

运行这段代码后,你应该会看到一个显示SVG图片的窗口。

概念解析:XML

XML(可扩展标记语言)是一种用于表示结构化数据的标记语言。它是一种通用的标记语言,被广泛应用于数据交换和存储。

XML使用标签来描述数据的结构和语义。以下是XML的一些基本特点:

  1. 可扩展性:可以通过定义自己的标记和规则来扩展XML的语义和结构。

  2. 自描述性:XML文档包含了关于其自身结构的信息。它使用标签和属性来描述数据的含义和关系。

  3. 纯文本:XML文档是纯文本文件,因此可以在不同的平台和应用程序之间轻松交换和共享。

  4. 层次结构:XML文档的数据以树状层次结构组织。它由元素、属性、文本节点和注释组成。

以下是使用XML的一些常见应用场景:

  1. 数据交换:XML常用于在不同的应用程序之间交换数据。例如,Web服务使用XML来传输数据。

  2. 配置文件:许多应用程序使用XML作为配置文件格式,以存储应用程序的设置和配置信息。

  3. 数据存储:XML也可以用于将结构化数据存储在文件或数据库中。

在Qt中,可以使用QXmlStreamReader和QXmlStreamWriter类来读取和写入XML文档。这些类提供了一种简单且灵活的方式来解析和生成XML数据。

相关推荐
&岁月不待人&20 分钟前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
StayInLove24 分钟前
G1垃圾回收器日志详解
java·开发语言
无尽的大道31 分钟前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
爱吃生蚝的于勒35 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
binishuaio44 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE1 小时前
【Java SE】StringBuffer
java·开发语言
就是有点傻1 小时前
WPF中的依赖属性
开发语言·wpf
洋2401 小时前
C语言常用标准库函数
c语言·开发语言
进击的六角龙1 小时前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
wrx繁星点点1 小时前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式