C++Qt学习——QFile、QPainter、QChart

目录

1、QFile(文本读写)——概念

1.1、拖入三个控件,对pushButton进行水平布局,之后整体做垂直布局

1.2、按住控件,转到槽,写函数

1.3、打开文件控件

A、首先引入以下两个头文件

 B、设置点击打开文件控件之后,首先进入那个文件路径

C、设置要打开的文件

D、打开文件

E、Qstring的构造函数自动转换   

F、关闭文件

1.4、关闭文件控件

A、首先判断文件是否存在

B、以可读可写打开文件

C、字符串转换成QByteArray+写文本

D、关闭文件

E、清理文本框

1.5、演示

2、QFile案例——备忘录

A、打开备忘录的时候

B、点击编辑之后

2.1、首先打开UI,在界面里面拖入pushbutton控件,垂直水平弹簧以并设置垂直水平布局如下

A、改变pushbutton的样式表

2.2、添加Qdialog设计师界面类

A、添加设计师界面类

B、选择,设计类名

C、最终文件展示

D、设计newfiledialog.ui界面

E、改变Pushbutton的样式表

F、给PushButton添加Icon,并设计大小

G、PushButton转到槽

H、在cpp文件里面编写内容

 2.3、点击widget,弹出dialog

A、引入newfiledialog.h头文件

B、widget的pushbutton转到槽

C、发现运行点击了控件没效果,因为没有Show

D、引入QFile

E、点击控件,跳转到文本编写界面

​编辑

F、Qfile创建文件,根据事件创建文件夹的名称

 G、获取textdeit的内容

H、在widget.cpp里面调用

I、将文本内容转换成utf8

J、关闭文件

K、如果没有写文本,直接删除刚才创建的文本

L、设置存储路径

M、查看效果

 3、QPainter(画画)——概念

3.1、创建项目

A、查看QWidet的paintEvent虚函数

B、查看内置如何重写虚函数 

C、在widget.h里面重写虚函数

D、按住F4跳转

E、去除警告

F、声明一个画家

G、画形状

H、画出来的有锯齿状,希望画的圆润一点儿——设置抗锯齿

I、给画笔加颜色

J、填充图像

K、将画刷给画家

 L、将画笔给画家

M、看效果

4、QPainter(画画)——轮番文字

 4.1、创建项目文件,将widget的大小设置为400,100

4.2、在widget.h里面写虚函数以及定义变量

4.3、在widget.cpp里面定义虚函数

A、防止警告,设置画笔颜色,大小等

B、声明变量等于主界面的大小,即设置绘图区域    

C、 设置x坐标,可以通过setleft来改变的,但是最右边的是不改变的,要不然矩形就变小了 

D、定义一个时钟变量来滚动

E、获取文本长度

F、连接信号槽

G、滚动起来

H、查看效果

5、QChart(图表)

5.1、创建QChart项目,打开UI拖入Graphics View控件

5.2、右键点击提升为QChartView,将对象名称也改为chartview

5.3、拖入Label,并对其进行水平垂直布局

5.4、!!!!!!点击文件的.pro,在这里必须添加charts

5.5、在widget.h文件里面引入

5.6、打开widget.cpp进行代码编写

A、创建图表视图

B、创建图表

C、创建坐标轴添加内容  

D、设置坐标轴的范围

E、设置坐标轴的标题和显示的格式

F、添加坐标轴

G、设置标题以及图例

H、创建曲线

I、给图表添加曲线

J、 !!!!!将曲线的数据与坐标轴连接起来!!!!!!!注意,这个要在图表添加曲线之后

K、 将图表放置在图表视图里面显示

L、查看效果


1、QFile(文本读写)——概念

1.1、拖入三个控件,对pushButton进行水平布局,之后整体做垂直布局

1.2、按住控件,转到槽,写函数

1.3、打开文件控件

A、首先引入以下两个头文件

#include <QDebug>
#include <QFileDialog>

 B、设置点击打开文件控件之后,首先进入那个文件路径

   QString fileName =QFileDialog::getOpenFileName(this, "选中文本", "/home/fdd" );

C、设置要打开的文件

  file.setFileName(fileName);

D、打开文件

file->open(QIODevice::ReadWrite);

这里用if判断是否打开成功——以只读的方式

//是否返回成功if(!file.open(QIODevice::ReadOnly)){qDebug()<< "文本打开失败"<<endl;return;}

E、Qstring的构造函数自动转换   

 ui->textEdit->setPlainText(file.readAll());

F、关闭文件

file.close();

1.4、关闭文件控件

A、首先判断文件是否存在

 if(file.fileName().isEmpty()){return;}

B、以可读可写打开文件

 if(!file.open(QIODevice::ReadWrite)){qDebug()<< "文本打开失败"<<endl;return;}

C、字符串转换成QByteArray+写文本

    file.write(ui->textEdit->toPlainText().toUtf8());

D、关闭文件

   file.close();

E、清理文本框

    ui->textEdit->clear();

1.5、演示

2、QFile案例——备忘录

本节主要讲解如何使用QFile设计一个备忘录。动态创建文件按,无论文件是否存在都会创建。有内容则保存,没有内容则不保存。

A、打开备忘录的时候

B、点击编辑之后

2.1、首先打开UI,在界面里面拖入pushbutton控件,垂直水平弹簧以并设置垂直水平布局如下

A、改变pushbutton的样式表

QPushButton{border-image:url(:/icons/pen.png)
}
QPushButton:pressed{border-image:url(:/icons/pen_pressed.png)
}

2.2、添加Qdialog设计师界面类

A、添加设计师界面类

B、选择,设计类名

C、最终文件展示

D、设计newfiledialog.ui界面

拖入一个pushbutton控件和textEdit控件,并添加水平弹簧,再对其进行水平垂直布局

E、改变Pushbutton的样式表

QPushButton{border:none;color: #ffba1a;
}QPushButton:pressed{	color: #ffb61a;
}

F、给PushButton添加Icon,并设计大小

G、PushButton转到槽

H、在cpp文件里面编写内容

void newfileDialog::on_pushButton_pressed()
{ui->pushButton->setIcon(QIcon(":/icons/back_pressed.png"));
}void newfileDialog::on_pushButton_released()
{ui->pushButton->setIcon(QIcon(":/icons/back.png"));
}void newfileDialog::on_pushButton_clicked()
{this->close();
}

 2.3、点击widget,弹出dialog

A、引入newfiledialog.h头文件

#include "newfiledialog.h"

B、widget的pushbutton转到槽

引入类

newfileDialog *newfiledialog= new newfileDialog(this);

C、发现运行点击了控件没效果,因为没有Show

    //将dialog铺满newfiledialog->resize(this->size());newfiledialog->show();//弹出dialog的时候,widget界面不可以操作newfiledialog->setModal(true);//循环newfiledialog->exec();delete newfiledialog;

D、引入QFile

#include <QFile>
#include <QDateTime>

E、点击控件,跳转到文本编写界面

F、Qfile创建文件,根据事件创建文件夹的名称

    QFile file;//随机命名file.setFileName(QDateTime::currentDateTime().toString("MMddhhmmss")+".txt");//创建文件,有就打开,没有就创建file.open(QIODevice::ReadWrite);

 G、获取textdeit的内容

怎么获取呢?那肯定是这块要去dialog哪里写

在newfiledialog.h里面定义文件

QString newfileDialog::getTextEditContent()
{return ui->textEdit->toPlainText();
}

H、在widget.cpp里面调用

创建一个对象,来接受获取到的内容

 QString tmp= newfiledialog->getTextEditContent();

I、将文本内容转换成utf8

file.write(tmp.toUtf8());

J、关闭文件

   file.close();

K、如果没有写文本,直接删除刚才创建的文本

    if(tmp.length()==0)file.remove();

L、设置存储路径

在linux下实在当前路径创建文件,在windows下就不一定了。

在main.cpp里面设置路径

//设置存储路径
#include <QDir>
//设置路径QDir::setCurrent(QApplication::applicationDirPath());

M、查看效果

 3、QPainter(画画)——概念

3.1、创建项目

A、查看QWidet的paintEvent虚函数

virtual void paintEvent(QPaintEvent *event);

B、查看内置如何重写虚函数 

 void SimpleExampleWidget::paintEvent(QPaintEvent *){QPainter painter(this);painter.setPen(Qt::blue);painter.setFont(QFont("Arial", 30));painter.drawText(rect(), Qt::AlignCenter, "Qt");}

C、在widget.h里面重写虚函数

//override重写void paintEvent(QPaintEvent *event) override;

D、按住F4跳转

引入Qpainter

#include <QPainter>

E、去除警告

    Q_UNUSED(event);

F、声明一个画家

//this是指定给图的对象QPainter painter(this);

G、画形状

    //画矩形painter.drawRect(200, 100, 100, 100);//多边形QPolygon polygon;polygon.setPoints(3, 100,20, 200,50, 300,300);//画三角形painter.drawPolygon(polygon);//画直线painter.drawLine(400,400, 500,500);//画椭圆painter.drawEllipse(200,200, 50,100);//画文字//画文字的区域QRectF rectf(0,0, 200, 100);painter.drawText(rectf,"你好");//放在中间居中AlignCenter 水平居中AlignHCenterpainter.drawText(rectf,Qt::AlignCenter,"你好");//画路径QPainterPath path;path.moveTo(20, 80);path.lineTo(20, 30);path.cubicTo(80, 0, 50, 50, 80, 80);painter.drawPath(path);

H、画出来的有锯齿状,希望画的圆润一点儿——设置抗锯齿

painter.setRenderHint(QPainter::Antialiasing);

I、给画笔加颜色

    //给画笔加颜色QPen pen;pen.setWidth(5);//pen.setColor(QColor("#888888"));pen.setColor(QColor(200, 100, 50));

J、填充图像

    QBrush brush(QColor(200, 100, 50));///*brush.setColor(QColor("#888888")) 不可以用setcolor设置颜色*/;

K、将画刷给画家

  painter.setBrush(brush);

 L、将画笔给画家

    //将画笔给画家painter.setPen(pen);

M、看效果

4、QPainter(画画)——轮番文字

 4.1、创建项目文件,将widget的大小设置为400,100

4.2、在widget.h里面写虚函数以及定义变量

void paintEvent(QPaintEvent *event) override;
    QFont font;int  offset;QTimer *timer;QString textContent;//用变量接受文字的宽度int textcontentWidth;

4.3、在widget.cpp里面定义虚函数

A、防止警告,设置画笔颜色,大小等

Q_UNUSED(event);QPainter painter(this);QPen pen;pen.setColor(QColor(Qt::red));painter.setPen(pen);painter.setFont(font);

B、声明变量等于主界面的大小,即设置绘图区域    

QRectF rectf=this->rect();

C、 设置x坐标,可以通过setleft来改变的,但是最右边的是不改变的,要不然矩形就变小了 

    //offset偏移rectf.setLeft(this->rect().width()-offset);
 ,offset(0)
,textContent("CSDN欢迎您的到来!")

D、定义一个时钟变量来滚动

private slots:void onTimerTimeout();
 timer=new  QTimer(this);//启动 ms//定时X毫秒timer->start(10);
void Widget::onTimerTimeout()
{if(offset<this->width()+textcontentWidth)offset+=1;elseoffset=0;//特别重要,重新配置this->update();
}

E、获取文本长度

    //用变量接受文字的宽度int textcontentWidth;

在widget.cpp里引用

//计算文字的总长度
#include <QFontMetrics>
//显示文字的宽度计算QFontMetrics fontMetrics(font);textcontentWidth=fontMetrics.width(textContent);

F、连接信号槽

    connect(timer, SIGNAL(timeout()), this, SLOT(onTimerTimeout()));

G、滚动起来

 painter.drawText(rectf, Qt::AlignVCenter,textContent);

H、查看效果

5、QChart(图表)

5.1、创建QChart项目,打开UI拖入Graphics View控件

5.2、右键点击提升为QChartView,将对象名称也改为chartview

 

5.3、拖入Label,并对其进行水平垂直布局

最终界面如下

5.4、!!!!!!点击文件的.pro,在这里必须添加charts

5.5、在widget.h文件里面引入

//引入
#include <QChart>
//QChartView用于显示图表
#include <QChartView>
#include <QValueAxis>
//命名空间也得加进来,要不然有警告
QT_CHARTS_USE_NAMESPACE

5.6、打开widget.cpp进行代码编写

A、创建图表视图

因为在UI里面已经创建过了,这句代码可以不要

    //QChartView *chartview= new QChartView(this);

B、创建图表

    QChart * chart= new QChart();

C、创建坐标轴添加内容  

  //x和y轴QValueAxis *valueAxisX= new QValueAxis();QValueAxis *valueAxisY= new QValueAxis();

D、设置坐标轴的范围

    valueAxisX->setRange(0, 5000);valueAxisY->setRange(0, 100);

E、设置坐标轴的标题和显示的格式

    valueAxisX->setTitleText("时间/ms");valueAxisY->setTitleText("温度/°C");valueAxisX->setLabelFormat("%d");valueAxisY->setLabelFormat("%d");//将xY轴的格子设置的多一点儿valueAxisX->setTickCount(10);valueAxisY->setTickCount(10);

F、添加坐标轴

    //6、将坐标轴添加到图表里面chart->createDefaultAxes();chart->addAxis(valueAxisX, Qt::AlignBottom);chart->addAxis(valueAxisY, Qt::AlignLeft);

G、设置标题以及图例

因为我们也就一根曲线,所以就不用设置图例了,直接false

    chart->setTitle("温度与时间曲线");chart->legend()->setVisible(false);

H、创建曲线

引入头文件,我们使用曲线

#include <QSplineSeries>//曲线
#include <QLineSeries>//折线

创建线曲线对象添加他的点,设置曲线的颜色

    QSplineSeries *SplineSeries=new QSplineSeries();SplineSeries->append(0,50);SplineSeries->append(1000,60);SplineSeries->append(2000,80);SplineSeries->append(3000,50);SplineSeries->append(4000,60);SplineSeries->append(5000,30);SplineSeries->append(6000,20);QPen pen(QColor(0xff5566));SplineSeries->setPen(pen);

I、给图表添加曲线

    chart->addSeries(SplineSeries);

J、 !!!!!将曲线的数据与坐标轴连接起来!!!!!!!注意,这个要在图表添加曲线之后

    //附属到坐标轴上面去SplineSeries->attachAxis(valueAxisX);SplineSeries->attachAxis(valueAxisY);

K、 将图表放置在图表视图里面显示

    ui->chartview->setChart(chart);

L、查看效果

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

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

相关文章

C++进阶之路---手撕“红黑树”

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、红黑树的概念与性质 1.概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点…

多模态数据融合简介#翻译

翻译自—— 感谢外国友人分享&#xff0c;鄙人在此翻译分享给大家INTRODUCTION TO DATA FUSION. multi-modality | by Haylat T | Haileleol Tibebu | Medium 多模态梳理_多模态图像和多模态方法的区别-CSDN博客 #这个网u也写得不错&#xff01; 多模态 神经网络是最著名的机…

idea远程试调jar、远程试调war

idea远程试调jar、远程试调war 目的&#xff1a;测试运行时与ide开发时是否一致。 配置jar Maven中添加 <packaging>jar</packaging>将其打包为jar。 设置运行入口main 编译jar 看到jar输出 配置试调 添加jar运行 远程试调 先在源码中打好断点试调 debug运行…

React的基本使用

安装VSCode插件 ES7 Reactopen in browser React基本使用 基本使用步骤 引入两个JS文件&#xff08; 注意引入顺序 &#xff09; <!-- react库, 提供React对象 --> //本地 <script src"../js/react.development.js"></script> //线上 //<scr…

Python大数据实践:selenium爬取京东评论数据

准备工作 selenium安装 Selenium是广泛使用的模拟浏览器运行的库&#xff0c;用于Web应用程序测试。 Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样&#xff0c;并且支持大多数现代 Web 浏览器。 #终端pip安装 pip install selenium #清华镜像安装 p…

【Ubuntu】Ubuntu的安装和配置

下载ubuntu镜像 https://releases.ubuntu.com/22.04.4/ubuntu-22.04.4-desktop-amd64.iso 一、Ubuntu安装 1.新建虚拟机 1.1按照它的提示创建用户&#xff1b;后面一直下一步就好 2.启动Ubuntu虚拟机 2.1设置为中文键盘 2.2默认即可&#xff1b;若是有低需求也可以选择最小…

企业开展开源安全治理必要性及可行性详细分析

背景 开源软件安全威胁是近几年企业安全面临的主要威胁&#xff0c;也是企业应用安全方向讨论的热门话题&#xff0c;但是由于是新的需求新的方向&#xff0c;很多企业在观望&#xff0c;当前开展这项工作是否已经成熟&#xff0c;项目成功率如何&#xff1f; 当新鲜事物产生时…

【C语言】linux内核软中断

一、什么是软中断&#xff1f; 内核中的软中断&#xff08;Softirqs&#xff09;和任务下半部&#xff08;Tasklets&#xff09;是Linux内核中用于在中断上下文之外处理中断服务的一种底层机制。这些机制解决了不能在中断服务例程&#xff08;ISR&#xff09;中执行耗时操作或…

Apache Doris 2.1 核心特性 Variant 数据类型技术深度解析

在最新发布的 Apache Doris 2.1 新版本中&#xff0c;我们引入了全新的数据类型 Variant&#xff0c;对半结构化数据分析能力进行了全面增强。无需提前在表结构中定义具体的列&#xff0c;彻底改变了 Doris 过去基于 String、JSONB 等行存类型的存储和查询方式。为了让大家快速…

在IDEA中设置使用鼠标滚轮控制字体大小

IDEA是我们常用的程序编程工具&#xff0c;有时为了方便&#xff0c;我们需要随时的调整字体的大小 本篇文章我使用了两种方式来设置IDEA中的字体大小 方式一&#xff1a;使用传统的方式来设置 首先在IDEA顶部的菜单栏中选择“file”菜单 然后在“file”菜单中选择“Setting…

Gitlab-runner注册与配置

文章目录 概要操作流程获取HTTPS证书上传证书修改gitlab-runner dns配置文件gitlab-runner 注册 概要 本文主要介绍了Gitlab-runner在内网环境注册到gitlab的操作方式。内网环境如下&#xff1a; 1、gitlab-runner由docker镜像部署&#xff1b; 2、gitlab部署与内网&#xff0…

3D Tiles语义分割流水线

Dylan Chua 和 Anne Lee 开发了一个处理管线&#xff0c;用于对 3D Tiles 中包含的 GL 传输格式 (glTF) 模型进行语义分割。 该管道读取并遍历 3D Tileset&#xff0c;以输出包含元数据的经过转换的划分对象集。 该项目为 3D 语义分割器提供了最小可行产品&#xff0c;作为各种…

视频技术2:把rtsp转为各种格式,包括webrtc

前题是启动ABLMediaServer&#xff0c;把ini里的hls_enable1 1、添加rtsp到视频服务器 http://127.0.0.1:7088/index/api/addStreamProxy?secret035c73f7-bb6b-4889-a715-d9eb2d1925cc&vhost_defaultVhost_&appMedia&streamCamera_00001&enable_hls1&ur…

【数据结构与算法】设计循环队列

&#x1f9d1;‍&#x1f393;个人主页&#xff1a;简 料 &#x1f3c6;所属专栏&#xff1a;C &#x1f3c6;个人社区&#xff1a;越努力越幸运社区 &#x1f3c6;简 介&#xff1a;简料简料&#xff0c;简单有料~在校大学生一枚&#xff0c;专注C/C/GO的干货分…

2022年第十三届蓝桥杯比赛Java B组 【全部真题答案解析-第一部分】

最近回顾了Java B组的试题&#xff0c;深有感触&#xff1a;脑子长时间不用会锈住&#xff0c;很可怕。 兄弟们&#xff0c;都给我从被窝里爬起来&#xff0c;赶紧开始卷&#xff01;&#xff01;&#xff01; 2022年第十三届蓝桥杯Java B组(第一部分 A~F题) 目录 一、填空题 …

详解基于快速排序算法的qsort的模拟实现

目录 1. 快速排序 1.1 快速排序理论分析 1.2 快速排序的模拟实现 2. qsort的模拟实现 2.1 qsort的理论分析 2.2 qsort的模拟实现 qsort函数是基于快速排序思想设计的可以针对任意数据类型的c语言函数。要对qsort进行模拟实现&#xff0c;首先就要理解快速排序。 1. 快…

【数据结构】堆的创建

文章目录 一、堆的概念及结构1、什么是堆2、堆的性质3、堆的结构及分类 二、堆的创建1、堆向下调整算法2、堆向上调整算法3、堆的创建&#xff08;向上调整算法&#xff09; 一、堆的概念及结构 1、什么是堆 堆就是以二叉树的顺序存储方式来存储元素&#xff0c;同时又要满足父…

智慧城市中的智慧生活:便捷、舒适与高效

目录 一、智慧城市中的智慧生活概述 二、智慧生活带来的便捷性 1、智慧交通的便捷出行 2、智慧购物的轻松体验 3、智慧政务的一站式服务 三、智慧生活带来的舒适性 1、智慧环境的绿色宜居 2、智慧医疗的健康保障 3、智慧教育的均衡发展 四、智慧生活带来的高效性 1、…

CSS案例-5.margin产品模块练习

效果1 相关数据 整体长&#xff1a;298px&#xff0c;高&#xff1a;415px 效果2 知识点 外边距margin 块级盒子水平居中 条件&#xff1a; 必须有宽度左右外边距设为auto 三种写法&#xff1a; margin-left&#xff1a;auto&#xff1b;margin-right&#xff1a;auto&…

高架学习笔记之信息安全基础

目录 一、信息安全基础 1.1. 概念 1.2. 信息存储安全 1.3. 网络安全 二、信息安全系统的组成框架 三、信息加解密技术和数字签名 四、访问控制技术 五、信息安全的保障体系与评估方法 5.1. 计算机信息系统安全保护等级 5.2. 安全风险管理 一、信息安全基础 1.1. 概念 …