Qt6 绘制矩形和一些字符串函数讲解

news2024/11/25 12:45:04

Qt6 绘制矩形和一些字符串函数讲解

  • 【1】Qt 6 模拟C++的cout输出
    • QTextStream类简介
    • 举例 (标准输出)
  • 【2】Qt 6 绘制移动的矩形事件
    • 运行效果
    • UI界面
    • 头文件.h
    • 源文件.cpp

【1】Qt 6 模拟C++的cout输出

只教方法,更多内容请学习官方文档

QTextStream类简介

QTextStream类是Qt框架中用于读取和写入文本数据的常用类之一。它提供了一种方便的方式来处理文本数据,例如从文件中读取文本、向文件中写入文本、以及与字符串进行输入输出等。

QTextStream可以与QIODevice的派生类一起使用,如QFile、QTcpSocket、QProcess等。它提供了对这些设备的高级文本操作接口,使得读取和写入文本数据变得更加简单。

QTextStream类提供了丰富的文本读写功能,包括:

  • 逐行读取和写入文本
  • 单词、字符的读取和写入
  • 格式化输出
  • 流的位置控制
  • 多种编码支持等

使用QTextStream类进行文本操作的一般流程如下:

  1. 创建一个QTextStream对象。
  2. 关联QTextStream对象与相应的设备,如文件、套接字等。
  3. 通过QTextStream对象进行文本的读写操作。
  4. 最后,关闭设备或释放相应的资源。

以下是一个QTextStream读取文件内容的示例:

QFile file("data.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    QTextStream in(&file);
    while (!in.atEnd()) {
        QString line = in.readLine();
        // 处理读取的每一行文本数据
    }
    file.close();
}

上述示例代码中,首先创建了一个QFile对象并打开文件。然后,创建了一个QTextStream对象,并通过构造函数将其与文件对象关联。然后可以使用QTextStream对象的readLine()方法逐行读取文件内容,直到文件结尾。在每次迭代中,代码读取一行文本数据,然后可以进行相应的处理。

通过QTextStream类,我们可以方便地对文本数据进行读写操作,并且支持各种格式化和高级功能,使得文本处理更加便捷和灵活。


举例 (标准输出)

// 打印流
QTextStream cout(stdout,QIODevice::WriteOnly);

 QString s1("hello");
 QString s2(" wolrd");
 QList<QString>list;
 list << s1 << s2;

 QListIterator<QString>iter(list);
 while (iter.hasNext()) {
     cout << iter.next();
 }
 cout << Qt::endl;

 QString s12 = s1 + s2 + "!";
 cout <<"s12 = "<<s12 <<Qt::endl;

 QStringList slist;
 slist << s1 <<s2;
 QString ss = slist.join(" ")+"!";
 cout <<"ss = " << ss <<Qt::endl;

【2】Qt 6 绘制移动的矩形事件

运行效果

在这里插入图片描述

UI界面

在这里插入图片描述

头文件.h

这是创建的Qt设计师界面

#ifndef FORM_H
#define FORM_H

#include <QWidget>
#include <QPoint>
#include <QPainter>
#include <QRect>
#include <QMouseEvent>

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT

public:
    explicit Form(QWidget *parent = nullptr);
    void paintEvent(QPaintEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    ~Form();

private:
    Ui::Form *ui;

    QPoint m_lastPos;
};

#endif // FORM_H

源文件.cpp

这段代码使用了Qt中的QRect类的方法adjusted()来创建一个新的矩形对象 r,并将其与当前对象的边界进行调整。
rect()QRect类的一个成员函数,用于返回当前对象的矩形边界。
``adjusted()方法用于在当前矩形的基础上进行边界调整。它接受四个参数,分别是左、上、右、下边界的调整量。正值会向内调整边界,负值会向外扩展边界。 在这段代码中,左、上边界都增加了10个单位,右、下边界都减少了10个单位,从而实现了整个矩形的向内调整。调整后的结果保存到了新创建的r 矩形对象中。 可以想象,如果原始矩形的左上角坐标为(x1, y1),右下角坐标为(x2, y2),那么调用了adjusted(10,10,-10,-10)之后, 新矩形 r 的左上角坐标就会是 (x1 + 10, y1 + 10),右下角坐标就会是 (x2 - 10, y2 - 10)。 注意,QRect类中的方法在调整边界时并不会修改原始矩形对象,而是返回一个新的矩形对象。因此,对于这段代码而言, 原始矩形对象的边界仍然保持不变,而调整后的结果保存在了r` 变量中。

默认坐标0,0, 在Qt中原始坐标是左上角 向右x逐渐增大,向下y逐渐增大,方向相反就减少,这样你就理解了

#include "form.h"
#include "ui_form.h"

Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
}

void Form::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);  // 对对当前界面绘制
    
    QRect r = this->rect().adjusted(10,10,-10,-10);	
    painter.setPen(QColor("#ff0000"));	//设置钢笔颜色
    painter.drawRect(r);	// 绘制矩形

    QRect r2(QPoint(0,0),QSize(60,60));
    if(this->m_lastPos.isNull()) {
        r2.moveCenter(r.center());	// 将矩形r2移动到矩形r的中部
    } else {
        r2.moveCenter(m_lastPos);	// 矩形r2随鼠标移动
    }
    painter.fillRect(r2, QColor("#FFBB33"));	//绘制矩形 填充颜色
}

void Form::mousePressEvent(QMouseEvent *event)
{
    m_lastPos = event->pos();	// 获取鼠标位置
    this->update();				// 更新 paintEvent
}
void Form::mouseMoveEvent(QMouseEvent *event)
{
    m_lastPos = event->pos(); // 获取鼠标位置
    this->update();	          // 更新 paintEvent
}

Form::~Form()
{
    delete ui;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/746824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用FreeMarker自定义生成word文档

使用FreeMarker自定义生成word文档 最终生成word文档如下&#xff1a; 实现思路&#xff1a; 按照要生成的文档模板格式&#xff0c;创建一个新的word&#xff08;doc&#xff09;文档&#xff0c;将其调整成所需格式&#xff0c;然后处理其中需要动态填充的数据&#xff0…

stable diffusion如何确保每张图的面部一致?

可以使用roop插件&#xff0c;确定好脸部图片后&#xff0c;使用roop固定&#xff0c; 然后生成的所有图片都使用同一张脸。 这款插件的功能简单粗暴&#xff1a;一键换脸。 如图所示&#xff1a; 任意上传一张脸部清晰的图片&#xff0c;点击启用。 在其他提示词不变的情况下…

LoRA: 大模型快速训练的秘诀

本文是四两拨千斤&#xff0c;训练大模型的PEFT方法的最后一小节&#xff0c;感兴趣读者可以阅读完整版。 LoRA LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 核心思路是对模型参数做低秩分解&#xff0c;仅训练分解后的参数&#xff0c;模型部署也需额外保存低秩参数&…

SIP业务之BLF

BLF&#xff08;Busy Lamp Field&#xff09;是SIP应用中的一项重要业务&#xff0c;用来监视目标号码的状态&#xff0c;常用于调度、坐席监控等场景。 一、 BLF原理 BLF功能需要IP终端或话机与SIP服务器协同实现的&#xff0c;主要流程如下&#xff1a; IP话机向SIP服务器发…

如何使用 ChatGP在TTPU(张量处理单元)上训练模型的指令

推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链 3D工具集&#xff1a;NSDT简石数字孪生. ChatGPT 作为您的专家助手 ChatGPT 可以帮助我们学习新的编程语言、课程、技术和技能。它已成为许多寻求改进工作流程或学习新事物的专业人士的首选工具。ChatGPT 专家助手提示可以减…

IntelliJ IDEA安装教程

一、下载安装包 首先进入IDEA官网下载2021.2.1版本的安装包&#xff0c;不要问我为什么不下最新版&#xff0c;后面我会说。 二、安装与配置 打开安装包&#xff0c;安装完成后选择Evaluate for free&#xff08;免费试用&#xff09;&#xff0c;创建一个项目&#xff0c;进入…

基于单片机空气质量检测二氧化碳 一氧化碳温湿度PM2.5检测系统的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;对空气空气中有毒有害气体进行监测&#xff1b;使用LCD1602液晶显示&#xff0c;采集到的PM2.5值通过单片机串口传输&#xff1b;通过传感器对室内PM2.5粉尘进行检查&#xff1b;通过按键设置的上限值&#xff1b;当检测到有毒气体…

5.2 基于ROP漏洞挖掘与利用

通常情况下栈溢出可能造成的后果有两种&#xff0c;一类是本地提权另一类则是远程执行任意命令&#xff0c;通常C/C并没有提供智能化检查用户输入是否合法的功能&#xff0c;同时程序编写人员在编写代码时也很难始终检查栈是否会发生溢出&#xff0c;这就给恶意代码的溢出提供了…

网络ping丢包什么原因(附解决方案)

​  数据包丢失是一种网络问题&#xff0c;当通过网络(或设备之间或通过 Internet)传输的数据包在传输过程中丢失或丢弃并且无法到达目的地时&#xff0c;就会发生这种情况。简单来说&#xff0c;数据包丢失是指数据包无法通过互联网从发送者成功传输到接收者。 如何检测数据…

阿里云RockMQ与SpringBoot的整合

前言&#xff1a; 开源版本Rocket和商业版本的RocketMQ有些不同&#xff0c;研究的是商业版本的RocketMQ&#xff0c;阿里云的官方文档&#xff0c;感觉有点乱。看不咋明白&#xff0c;网上虽然有教程&#xff0c;大都还是有点缺少&#xff0c;有时候会突然跳了步骤&#xff0c…

微信小程序开发1

这里写目录标题 一、结构1.项目结构页面结构 3.小程序的通信模型4.小程序运行机制 二、组件视图容器组件 : 一、结构 1.项目结构 页面结构 2.语言结构 WXML与HTML区别 : WXSS与CSS区别 : .Js文件的分类 3.小程序的通信模型 ①他是由渲染层与逻辑层 根据微信客户端进行转…

RPC分布式网络通信框架(三)—— 服务配置中心Zookeeper模块

文章目录 一、使用Zookeeper的意义二、Zookeeper基础1 文件系统2 通知机制3 原生zkclient API存在的问题4 服务配置中心Zookeeper模块 三、Zk类实现Start方法创建节点、get节点值方法 四、框架应用rpc提供端框架rpc调用端&#xff08;客户端&#xff09;框架 总结 一、使用Zook…

平均精度 (mAP):常见定义、误区和误解

我们分解并揭开了常见对象检测指标的神秘面纱,包括平均精度 (mAP) 和平均平均召回率 (mAR)。 这篇文章深入介绍了如何正确计算和使用平均平均精度 (mAP) 和平均平均召回率 (mAR) 进行对象检测,同时消除对 AP、mAP 和第三方库(例如 TorchMetrics 或 pycocotools)的常见误解。…

基于冻土水文模拟的松花江流域水资源演变规律

原文信息 题目&#xff1a;基于冻土水文模拟的松花江流域水资源演变规律 作者&#xff1a;刘水清 周祖昊 刘佳嘉 李佳 谢新民 贾仰文 王浩 期刊&#xff1a;《南水北调与水利科技&#xff08;中英文&#xff09;》23年1期 摘要 为分析松花江流域水资源的演变规律&#…

基于SpringCloud微服务图书管理系统设计与实现

一、引言 本次设计基于JavaEE和SpringCloud微服务的图书馆管理系统。利用当前计算机技术的快速发展来构建图书馆管理系统。 随着计算机技术和网络的飞速发展,互联网与互联网加的程序应用在世界范围内越来越流行,当今社会正迅速进入信息社会,信息自动化的作用也日益增强。…

MySQL基础篇第7章(单行函数)

文章目录 1、函数的理解1.1 什么是函数1.2 不同DBMS函数的差异1.3 MySQL的内置函数分类 2、数值函数2.1 基本函数2.2 角度与弧度互转函数2.3 三角函数2.4 指数和对数2.5 进制间的转换 3、字符串函数4、日期和时间函数4.1 获取日期、时间4.2 日期与时间戳的转换4.3 获取月份、星…

815. 打印字符串

链接&#xff1a; 链接 题目&#xff1a; 给定一个字符串&#xff0c;请你编写一个函数&#xff0c;void print(char str[])&#xff0c;将这个字符串打印出来。 输入格式 共一行&#xff0c;包含一个字符串。 输出格式 共一行&#xff0c;表示打印出的字符串。 数据范围 1≤字…

STM32 Proteus仿真ili9341 TFT2048小游戏 -0067

STM32 Proteus仿真ili9341 TFT2048小游戏 -0067 Proteus仿真小实验&#xff1a; STM32 Proteus仿真ili9341 TFT2048小游戏 -0067 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 ili9341 TFT显示器上下左右方向键赢了按键输了按键 1.标准2048经典游戏玩法&#…

LayUI之动态选项卡Tabiframe使用

目录 一.LayUI之动态选项卡 1.什么是LayUI之选项卡&#xff1f; 1.2layui选项卡使用语法 2. 在企业中LayUI选项卡的使用 二.将layui选项卡部署在web项目中 1.首先查看layui官方文档 2.加入Jsp 3.加入数据&#xff0c;并进行bug修复 3.1首先在我们的二级菜单添加一个点击…

GPT-4的详细信息已经泄露

这位作者说GPT-4的详细信息已经泄露&#xff0c;不知道可信度如何。一些关键信息&#xff1a;- GPT-4的大小是GPT-3的10倍以上。我们认为它在120层中总共有大约1.8万亿个参数。- GPT-4是多个专家模型混合在一起&#xff0c;但不是之前说的8个专家&#xff0c;而是16个。研究人员…