一、自定义控件
1.1 自己做一个组件步骤
在创建的好的项目里==添加一个Qt 设计师界面类==
选择Widget
起一个类名
在smallwidget.ui中加入一个widget,右键,提升为
输入类名称(注意与创建的类名一致),勾上全局包含(为了再次添加方便),然后点击添加,再点击提升
运行
1.2 代码看帮助加书写详解
在smallwidget.cpp中输入代码:
先理清楚两个类的信号和槽
左边是拖动ui里面的Spin Box
,类名叫QSpinBox
右边是拖动ui里面的Horizontal Slider
,类名叫QSlider
1.2.1 QSpinBox动,QSlider跟着动(有一个解决函数重载的问题)
通过QSpinBox
控制QSlider
①、那么看QSpinBox
的信号,查阅助手里的QSpinBox
,找到Signals
(在帮助文档里找,一般是要加个Q)
点进去,发现会发生重载,要用函数指针对函数重载进行处理
void(QSpinBox:: * spSignal)(int) = &QSpinBox::valueChanged;
②、QSlider
是信号接收者,看它的槽函数, 发现没有槽函数,那么看它的父辈
因为没有槽函数,那看看父辈,发现有槽函数
进入查看槽函数,setValue()函数没有重载
整体代码就为:
//QSpinBox移动 QSlider跟着移动
/*本来应该写connect(ui->spinBox,&QSpinBox::valueChanged,ui->horizontalSlider,&QSlider::setValue);
* 但是发生了函数重载,得用函数指针解决函数重载
*/
void(QSpinBox:: * spSignal)(int) = &QSpinBox::valueChanged;
connect(ui->spinBox,spSignal,ui->horizontalSlider,&QSlider::setValue);
1.2.2 QSlider动,QSpinBox跟着动
QSlider是信号的发送者,查看它的信号函数
父类里有Signals
点入,没有重载,不需要函数指针解决重载问题
再看QSpinBox的槽函数
整体的控制代码为:
//QSlider移动 QSpinBox跟着移动
connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
1.2.3 使用
见1.1 中 在smallwidget.ui中加入一个widget,右键,提升为…及之后步骤
1.3 进阶
需求:对外设置两个接口。即再进一步的设置两个按钮,一个设置值,一个获取值
1.3.1 获取值
①、在widget.ui中加入两个按钮
②、在smallwidget.h中添加两个设置值和获取值的接口(方法)
③、在smallwidget.cpp中对两个接口进行实现
//设置数字
void smallWidget::setNum(int num)
{
ui->spinBox->setValue(num);
}
//获取数字
int smallWidget::getNum()
{
return ui->spinBox->value();
}
整体:
④、到widget.cpp中写代码,获取按钮改名叫btn_get
//点击获取 获取控件当前值 this可以省略
connect(ui->btn_get,&QPushButton::clicked,this,[=](){
//加入的第一个自造组件叫widget
qDebug()<<ui->widget->getNum();
});
1.3.2 设置值
//点击设置 设置一半
connect(ui->btn_set,&QPushButton::clicked,[=](){
ui->widget->setNum(50);
});
二、Qt消息机制和事件
2.1 鼠标事件
QWidget
类下的功能
- 鼠标进入事件
enterEvent
- 鼠标离开事件
leaveEvent
QLabel的框可以调成看见的
MyLabel.h 文件
#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
class myLabel : public QLabel
{
Q_OBJECT
public:
explicit myLabel(QWidget *parent = nullptr);
//鼠标进入事件
void enterEvent(QEvent * event);
//鼠标离开事件
void leaveEvent(QEvent *event);
signals:
};
#endif // MYLABEL_H
MyLabel.cpp
#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>
myLabel::myLabel(QWidget *parent) : QLabel(parent)
{
}
//鼠标进入事件
void myLabel::enterEvent(QEvent * event)
{
qDebug()<<"鼠标进入事件";
}
//鼠标离开事件
void myLabel::leaveEvent(QEvent *)
{
qDebug()<<"鼠标离开事件";
}
}
2.2 QLabel下的功能
QLabel
是QWidget
的子类
- 鼠标按下
mousePressEvent ( QMouseEvent ev)
- 鼠标释放
mouseReleaseEvent
- 鼠标移动
mouseMoveEvent
ev->x()
x坐标ev->y()
y坐标globalX
和globalY
以大的框为坐标- 格式化字符串 QString( “ %1 %2 ” ).arg( 111 ).arg(222)
MyLabel.cpp
#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
class myLabel : public QLabel
{
Q_OBJECT
public:
explicit myLabel(QWidget *parent = nullptr);
//鼠标进入事件
void enterEvent(QEvent * event);
//鼠标离开事件
void leaveEvent(QEvent *event);
//鼠标的按下
virtual void mousePressEvent(QMouseEvent *ev);
//鼠标的释放
virtual void mouseReleaseEvent(QMouseEvent *ev);
//鼠标的移动
virtual void mouseMoveEvent(QMouseEvent *ev);
signals:
};
#endif // MYLABEL_H
MyLabel.cpp
#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>
myLabel::myLabel(QWidget *parent) : QLabel(parent)
{
}
//鼠标进入事件
void myLabel::enterEvent(QEvent * event)
{
//qDebug()<<"鼠标进入事件";
}
//鼠标离开事件
void myLabel::leaveEvent(QEvent *)
{
//qDebug()<<"鼠标离开事件";
}
//鼠标的按下
void myLabel::mousePressEvent(QMouseEvent *ev)
{
QString str = QString("鼠标按下了 x =%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
}
//鼠标的释放
void myLabel::mouseReleaseEvent(QMouseEvent *ev)
{
QString str = QString("鼠标释放了 x =%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
}
//鼠标的移动
void myLabel::mouseMoveEvent(QMouseEvent *ev)
{
QString str = QString("鼠标移动了 x =%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
}
2.3 判断鼠标键
ev->button()
可以判断所有按键Qt::LeftButton
Qt::RightButton
ev->buttons()
判断组合按键 判断move时候的左右键 结合 & 操作符- 设置鼠标追踪
setMouseTracking(true);
#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>
myLabel::myLabel(QWidget *parent) : QLabel(parent)
{
//设置鼠标追踪状态
setMouseTracking(true);
}
//鼠标进入事件
void myLabel::enterEvent(QEvent * event)
{
//qDebug()<<"鼠标进入事件";
}
//鼠标离开事件
void myLabel::leaveEvent(QEvent *)
{
//qDebug()<<"鼠标离开事件";
}
//鼠标的按下
void myLabel::mousePressEvent(QMouseEvent *ev)
{
//当 鼠标左键按下 提示信息 不写这个if,左右中都可以触发
// if(ev->button()==Qt::LeftButton)
// {
QString str = QString("鼠标按下了 x =%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
// }
}
//鼠标的释放
void myLabel::mouseReleaseEvent(QMouseEvent *ev)
{
//当 鼠标左键放下 提示信息 不写这个if,左右中都可以触发
// if(ev->button()==Qt::LeftButton)
// {
QString str = QString("鼠标释放了 x =%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
// }
}
//鼠标的移动
void myLabel::mouseMoveEvent(QMouseEvent *ev)
{
//当 鼠标左键移动 提示信息 不写这个if,左右中都可以触发
//这里与上面也不一样,得用buttons 和&
if(ev->buttons() & Qt::LeftButton)
{
QString str = QString("鼠标移动了 x =%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
}
}
2.4 定时器1
- 第一种方式-利用void timerEvent(QTimerEvent * ev)
- 启动定时器 startTimer(1000); 毫秒单位
- timerEvent 的返回值是定时器的唯一标识 可以和 ev->timeId 作比较
Widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
//重写定时器的事件
void timerEvent(QTimerEvent *ev);
int id1;//定时器1的唯一标识
int id2;//定时器2的唯一标识
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
Widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//启动定时器
id1 = startTimer(1000); //参数1 间隔 单位 毫秒
id2 = startTimer(2000);
}
void Widget::timerEvent(QTimerEvent *ev)
{
if(ev->timerId() == id1)
{
//这里必须设置为static类型
static int num = 1;
//int 转 string
//label2 每隔1秒+1
ui->label_2->setText(QString::number(num++));
}
if(ev->timerId()==id2)
{
//label3 每隔2秒+1
static int num2 = 1;
ui->label_3->setText(QString::number(num2++));
}
}
Widget::~Widget()
{
delete ui;
}
2.5 定时器2(推荐)
- 利用定时器类 QTimer
- 创建定时器对象 QTimer * timer = new QTimer(this)
- 启动定时器 timer->start(毫秒)
- 每隔一定毫秒,发送信号 timeout ,进行监听
- 暂停 timer->stop
头文件#include //定时器的类
//定时器的第二种方式
QTimer * timer = new QTimer(this);
//启动定时器
timer->start(500);
connect(timer,&QTimer::timeout,[=](){
//label4 每隔0.5秒+1
static int num4 = 1;
ui->label_4->setText(QString::number(num4++));
});
补充一个附加功能:
//点击暂停按钮 实现停止定时器
connect(ui->btn,&QPushButton::clicked,[=](){
timer->stop();
});
2.6 event事件
- 用途:用于事件的分发
- 也可以做拦截操作,不建议
- bool event( QEvent * e);
- 返回值 如果是true 代表用户处理这个事件,不向下分发了
- e->type() == 鼠标按下
- 类型转换,因为QEvent没有显示坐标的函数 QMouseEvent * ev = static_cast<QMouseEvent * >(e);
myLabel.h
//通过event事件分发器 拦截 鼠标按下事件
bool event(QEvent * e);
myLabel.cpp
bool myLabel::event(QEvent *e)
{
//如果是鼠标的按下 在event事件发表中做拦截操作
if(e->type() == QEvent::MouseButtonPress)
{
//这里要类型转换,因为QEvent没有显示坐标的函数
QMouseEvent * ev = static_cast<QMouseEvent * >(e);
QString str = QString("Event函数中,鼠标按下了 x =%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
return true; //true代表用户自己处理这个事件,不向下分发
}
//其他事件 交给父类处理 默认处理
return QLabel::event(e);
}
2.7 事件过滤器
-
在程序将时间分发到事件分发器前,可以利用过滤器做拦截
-
步骤
1.给控件安装事件过滤器
2.重写 eventFilter函数 (obj , ev)
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
//重写定时器的事件
void timerEvent(QTimerEvent *ev);
int id1;//定时器1的唯一标识
int id2;//定时器2的唯一标识
//重写事件过滤器事件
bool eventFilter(QObject *obj,QEvent *e);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
//给label 安装事件过滤器
//步骤一:安装事件过滤器
ui->label->installEventFilter(this);
//步骤二:重写eventfilter事件
bool Widget::eventFilter(QObject *obj,QEvent * e)
{
if(obj == ui->label)
{
if(e->type()==QEvent::MouseButtonPress)
{
QMouseEvent * ev = static_cast<QMouseEvent * >(e);
QString str = QString("事件过滤器中,鼠标按下了 x =%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
return true; //true代表用户自己处理这个事件,不向下分发
}
}
//其他默认处理
return QWidget::eventFilter(obj,e);
}
整体:
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QTimer> //定时器的类
#include <QMouseEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//启动定时器
id1 = startTimer(1000); //参数1 间隔 单位 毫秒
id2 = startTimer(2000);
//定时器的第二种方式
QTimer * timer = new QTimer(this);
//启动定时器
timer->start(500);
connect(timer,&QTimer::timeout,[=](){
//label4 每隔0.5秒+1
static int num4 = 1;
ui->label_4->setText(QString::number(num4++));
});
//点击暂停按钮 实现停止定时器
connect(ui->btn,&QPushButton::clicked,[=](){
timer->stop();
});
//给label 安装事件过滤器
//步骤一:安装事件过滤器
ui->label->installEventFilter(this);
}
//步骤二:重写eventfilter事件
bool Widget::eventFilter(QObject *obj,QEvent * e)
{
if(obj == ui->label)
{
if(e->type()==QEvent::MouseButtonPress)
{
QMouseEvent * ev = static_cast<QMouseEvent * >(e);
QString str = QString("事件过滤器中,鼠标按下了 x =%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
return true; //true代表用户自己处理这个事件,不向下分发
}
}
//其他默认处理
return QWidget::eventFilter(obj,e);
}
void Widget::timerEvent(QTimerEvent *ev)
{
if(ev->timerId() == id1)
{
//这里必须设置为static类型
static int num = 1;
//int 转 string
//label2 每隔1秒+1
ui->label_2->setText(QString::number(num++));
}
if(ev->timerId()==id2)
{
//label3 每隔2秒+1
static int num2 = 1;
ui->label_3->setText(QString::number(num2++));
}
}
Widget::~Widget()
{
delete ui;
}
2.8 QPainter 绘图
- 绘图事件
void paintEvent()
- 声明一个画家对象
QPainter painter(this)
this指定绘图设备 - 画线、画圆、画矩形、画文字
- 设置画笔
QPen
设置画笔宽度 、风格 - 设置画刷
QBrush
设置画刷 风格
#include "widget.h"
#include "ui_widget.h"
#include <QPainter> //画家类
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
void Widget::paintEvent(QPaintEvent *event)
{
//实例化画家对象 this 指定的是绘图的设备(在当前窗口画)
QPainter painter(this);
//设置画笔
QPen pen(QColor(255,0,0));
//设置画笔的宽度
pen.setWidth(3);
//设置画笔风格
pen.setStyle(Qt::DotLine);
//让画家使用这个画笔
painter.setPen(pen);
//设置画刷
QBrush brush(Qt::cyan);
//设置画刷风格
brush.setStyle(Qt::Dense7Pattern);
//让画家使用画刷
painter.setBrush(brush);
//画线
painter.drawLine(QPoint(0,0),QPoint(100,100));
//画圆 椭圆
painter.drawEllipse(QPoint(100,100),50,50);
//画矩形
painter.drawRect(QRect(20,20,50,50));
//画文字
painter.drawText(QRect(10,200,150,50),"好好学习,天天向上");
}
Widget::~Widget()
{
delete ui;
}
2.9 QPainter高级设置
-
抗锯齿 效率低
-
painter.setRenderHint(QPainter::Antialiasing);
-
对画家进行移动
painter.translate(100,0);
- 保存状态
save
- 还原状态
restore
#include "widget.h" #include "ui_widget.h" #include <QPainter> //画家类 Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); } void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawEllipse(QPoint(100,50),50,50); painter.drawEllipse(QPoint(200,50),50,50); //设置 抗锯齿能力 效率较低 painter.setRenderHint(QPainter::HighQualityAntialiasing); painter.drawEllipse(QPoint(200,50),50,50); } Widget::~Widget() { delete ui; }
-
如果想手动调用绘图事件 利用update
- 利用画家画图片
painter.drawPixmap( x,y,QPixmap( 路飞) )
- 利用画家画图片
首先添加图片资源
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
//绘图事件
void paintEvent(QPaintEvent *event);
int posx = 0;
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QPainter> //画家类
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//点击移动按钮,移动图片
connect(ui->pushButton,&QPushButton::clicked,[=](){
posx +=20;
//如果要手动调用绘图事件 用update 更新
update();
});
}
void Widget::paintEvent(QPaintEvent *event)
{
///利用画家 画资源图片
QPainter painter(this);
//如果超出了屏幕 从0开始
if(posx > this->width())
{
posx = 0;
}
painter.drawPixmap(posx,0,QPixmap(":/Image/Luffy.png"));
}
Widget::~Widget()
{
delete ui;
}
三、绘图和绘图设备
- QPixmap QImage QBitmap(黑白色) QPicture QWidget
3.1 QPixmap 对不同平台做了显示的优化
- QPixmap pix( 300,300)
- pix.fill( 填充颜色 )
- 利用画家 往pix上画画 QPainter painter( & pix)
- 保存 pix.save( “路径”)
//Pixmap绘图设备 专门为平台做了显示的优化
QPixmap pix(300,300);
//填充颜色
pix.fill(Qt::white);
//声明画家
QPainter painter(&pix);
painter.setPen(QPen(Qt::green));;
painter.drawEllipse(QPoint(150,150),100,100);
//保存
pix.save("F:\\pix.png");
3.2 Qimage 可以对像素进行访问
- 使用和QPixmap差不多 QImage img(300,300,QImage::Format_RGB32);
- 其他流程和QPixmap一样
//QImage 绘图设备 可以对像素进行访问
QImage img(300,300,QImage::Format_RGB32);
img.fill(Qt::white);
QPainter painter(&img);
painter.setPen(QPen(Qt::green));;
painter.drawEllipse(QPoint(150,150),100,100);
//保存
img.save("F:\\img.png");
- 可以对像素进行修改 img.setPixel(i,j,value);
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
//利用QImagee 对像素进行修改
QImage img;
img.load(":/Image/Luffy.png");
//修改像素点
for(int i=50;i<100;i++)
{
for(int j=50;j<100;j++)
{
QRgb value = qRgb(255,0,0);
img.setPixel(i,j,value);
}
}
}
3.3 QPicture 记录和重现 绘图指令
- QPicture pic
- painter.begin(&pic);
- 保存 pic.save( 任意后缀名 )
- 重现 利用画家可以重现painter.drawPicture(0,0,pic);
#include "widget.h"
#include "ui_widget.h"
#include <QPixmap>
#include <QPainter>
#include <QImage>
#include <QPicture>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//QPicture 绘图设备,可以记录和重现绘图指令
QPicture pic;
QPainter painter;
painter.begin(&pic); //开始往pic上画
painter.setPen(QPen(Qt::cyan));;
painter.drawEllipse(QPoint(150,150),100,100);
painter.end();//结束画画
//保存到磁盘
pic.save("E:\\pic.zt");
}
//绘图事件
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
//重现QPicture的绘图指令
QPicture pic;
pic.load("E:\\pic.zt");
painter.drawPicture(0,0,pic);
}
Widget::~Widget()
{
delete ui;
}
四、文件系统
4.1 QFile 对文件进行读写操作
- QFile进行读写操作
- QFile file( path 文件路径)
4.1.1 读
- file.open(打开方式) QIODevice::readOnly
- 全部读取 file.readAll() 按行读 file.readLine() atend()判断是否读到文件尾
- 默认支持编码格式 utf-8
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QFile>
#include <QTextCodec>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//点击选取文件按钮,弹出文件对话框
connect(ui->pushButton,&QPushButton::clicked,[=](){
QString path = QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\lenovo\\Desktop\\资料-qt从入门到实战\\day3资料\\Doc");
//将路径放入到lineEdit中
ui->lineEdit->setText(path);
//读取内容 放入到 textEdit 中
//QFile 默认支持的格式是 utf-8
QFile file(path); //参数就是读取文件的路径
//设置打开方式
file.open(QIODevice::ReadOnly);
//QByteArray array = file.readAll();
QByteArray array;
while(!file.atEnd())
{
array += file.readLine(); //按行来读
}
//将读取到的数据 放入textEdit中
ui->textEdit->setText(array);
//对文件对象进行关闭
file.close();
});
}
Widget::~Widget()
{
delete ui;
}
- 利用编码格式类 指定格式 QTextCodeC
- QTextCodec * codec = QTextCodec::codecForName(“gbk”);
- //ui->textEdit->setText( codec->toUnicode(array) );
- 文件对象关闭 close
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QFile>
#include <QTextCodec>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//点击选取文件按钮,弹出文件对话框
connect(ui->pushButton,&QPushButton::clicked,[=](){
QString path = QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\lenovo\\Desktop\\资料-qt从入门到实战\\day3资料\\Doc");
//将路径放入到lineEdit中
ui->lineEdit->setText(path);
//编码格式类
QTextCodec * codec = QTextCodec::codecForName("gbk");
//读取内容 放入到 textEdit 中
//QFile 默认支持的格式是 utf-8
QFile file(path); //参数就是读取文件的路径
//设置打开方式
file.open(QIODevice::ReadOnly);
//QByteArray array = file.readAll();
QByteArray array;
while(!file.atEnd())
{
array += file.readLine(); //按行来读
}
//将读取到的数据 放入textEdit中
//ui->textEdit->setText(array);
//如果是gbk
ui->textEdit->setText(codec->toUnicode(array));
//对文件对象进行关闭
file.close();
//进行写文件
file.open(QIODevice::Append); //用追加的方式进行写
file.write("啊啊啊啊啊");
file.close();
});
}
Widget::~Widget()
{
delete ui;
}
4.1.2 写
- file.open( QIODevice::writeOnly / Append)
- file.write(内容)
- file.close 关闭
//进行写文件
file.open(QIODevice::Append); //用追加的方式进行写
file.write("啊啊啊啊啊");
file.close();
4.2 QFileInfo 读取文件信息
- QFileInfo info(路径)
- qDebug() << “大小:” << info.size() << " 后缀名:" << info.suffix() << " 文件名称:"<<info.fileName() << " 文件路径:"<< info.filePath();
- qDebug() << “创建日期:” << info.created().toString(“yyyy/MM/dd hh:mm:ss”);
- qDebug() << “最后修改日期:”<<info.lastModified().toString(“yyyy-MM-dd hh:mm:ss”);
//QFileInfo 文化信息类
QFileInfo info(path);
qDebug()<<"文件的大小:"<<info.size()<<" 后缀名:"<<info.suffix()<<"文件名称:"<<info.fileName()<<"文件路径"<<info.filePath();
qDebug()<<"创建日期:"<<info.created().toString("yyy/MM/dd hh:mm:ss");
qDebug()<<"最后修改日期:"<<info.lastModified().toString("yyy/MM/dd hh:mm:ss");