Day_4
Review
1、自定义控件
1、创建一个自定义控件
2、在要提升的控件身上右键->提升为。
3、对话框 – 添加类(自定义类的名字)->提升
2、绘图和设备
1>画家类: QPainter
QPainter 设置绘图设备
1、构造函数的参数 ->QPainter p(绘图设备)
2、在当前窗口中画图:
重写paintEvent()函数
2> 绘图设备
1、QPixmao p;
p.load(路径)—加载图片
a、专门为图像再屏幕上的显示做了优化、依赖于平台
b、主要应用于平台上的图像显示,在不同的平台拥有相同的效果
2.QBitmap
是QPixmap的一个子类 只显示黑白色。
3.QImage
a、使用独立于硬件的绘制系统,专门为图像的像素级访问做了优化
b、可以在多线程中使用
c、可以修改图片的任何一个像素值
4.QPicture–二进制文件
a、记录和重现QPainter的各条指令
b、与平台无关
3、QPixmap和QImage直接的相互转换 QPixmap
1、QPixmap->QImage: QPixmap::toImage()
2、QImage->QPixmap::fromImage()[static]
4、手动更新窗口函数:
update();
QFile操作-没学QFile等于没学QT。
文件的读写操作
打开指定文件并且显示在指定窗口:
添加如下代码:
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->selcetFile,&QPushButton::clicked,this,[=]()
{
QString FileName = QFileDialog::getOpenFileName(this,"open file","d:\\");
if(FileName.isEmpty()==true)
{
QMessageBox::warning(this,"warning","select file failed");
return ;
}
ui->filePath->setText(FileName);
//创建文件对象
//默认读取文件格式:utf8
QFile file(FileName);
QTextCodec *code = QTextCodec::codecForName("gbk");
//指定打开方式
bool isOk = file.open(QFile::ReadOnly);
if(isOk == false)
{
QMessageBox::critical(this,"ERROR","file open failed");
return;
}
//读文件
QByteArray array = file.readAll();
//显示到文本框
ui->textEdit->setText(array);
ui->textEdit->setText(code->toUnicode(array));
//关闭文件
file.close();
});
}
如何用readline判断读到了最后一行:
//读文件
QByteArray array;
while (file.atEnd())
{
array += file.readLine();
}
写文件的三种方式:
char buf[128]={0};
file.write(QString("Hello world").toUtf8());
file.write(buf,strlen(buf));
file.write(buf);
文件流
QFile f("aaa.txt");
f.open(QFile::WriteOnly);
QTextStream txt(&f);
//写文件
txt << QString("hello world")<<123456;
f.close();
QString buf1;
f.open(QFile::ReadOnly);
txt.setDevice(&f);
txt>>buf1;
qDebug()<<buf1.toUtf8().data();
打印的类型:
QFile f("aaa.txt");
f.open(QFile::WriteOnly);
QDataStream ds(&f);
//写文件
ds << QString("hello world")<<123456;
f.close();
QString buf1;
int number;
f.open(QFile::ReadOnly);
ds.setDevice(&f);
ds>>buf1>>number;
qDebug()<<buf1.toUtf8().data()<<number;
打印的类型:
复习:QFile f;
1、f.setFileName(stringpathname);
2、打开文件 open(QFile::ReadOnly)
char buf[111];
3、读文件 read(char *buf,int size);
QByteArray array =readAll();
while(file.atEnd()==false)
QByteArray line =readLine();
4、close();
5、默认格式为 utf8
文件流操作
方式1:
QFile f;
QTextStream stream(&f);
方式2:
QTextStream stream;
stream.setDevice(&f);
stream <<“aaaaaaf”;写入设备中
stream>>str; 读到内存中
QDataStream ds(&f);
QTextStream stream(&f);
stream.setDevice(&f);
//写数据
ds << QString(“hello world”)<<123456;
ds>>string>>number>>QImage;
QDataStream sa(&array,QIODevice::ReadWrite);
sa<<image;
获取文件信息
添加如下头文件#include <QFileInfo>
参数为文件名。
包含如下头文件#include <QDateTime>
打印文件字节大小。打印文件路径。打开文件名称。显示最后修改的日期。
QFileInfo info("D:\\mypic.jpg");
qDebug()<<"file size :"<<info.size();
qDebug()<<"file path :"<<info.path();
qDebug()<<"file path :"<<info.fileName();