之前我们是通过画家类通过画家引擎画到widget上(widget也是绘图设备的子类,是的,他是多继承,也是QObject的子类)。当然绘图设备主要有四个
QPixmap,QBitmap,QImage,QPicture.
QPixmap最主要的就是可以把画的东西存到电脑的硬盘中,不是画在Widget上。Qbitmap就是只有黑白图像,相当于图片二值化,不怎么常用。
QPixmap pix(300,300);
QPainter painter(&pix);
painter.setPen(QPen(Qt::green));//设置画笔颜色,不然画笔和背景都是黑色的
painter.drawEllipse(QPoint(150,150),100,100);
pix.save("D:\\pix.png");
QImage的功能除了和前面的一样,就比较强大,因为它提供了访问像素的方法。
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QImage img;
img.load(":/scatter/sss.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);
}
}
painter.drawImage(0,0,img);
}
其实这个功能就比较强大了,仿佛给我们打开了图像处理的大门,我们可以结合相关算法写出一些程序来进行简单的图像处理。
QPicture比较特别,是可以重复一些指令。
可以看到我们把画一个圆的指令记录在pic中并保存到D盘,但是我们后缀名是zt,瞎写的,根本无法打开,那么怎么打开呢,利用QPicture的重复指令功能,在绘图事件函数中加载到pic中,利用画家画出这个图像。
2、QFlie文件读写
在C和C++中。都有自己的文件读取函数,Qt中的文件读取就是QFile.
假设我们用ui设计这样一个界面,界面设计内容已经说过了。点击选择按钮可以弹出文件对话框选择文件,路径显示在Line edit中,文件内容显示在下面textedit。
connect(ui->pushButton,&QPushButton::clicked,[=](){
QString path=QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\HP");
ui->lineEdit->setText(path);
QFile file(path);
file.open(QIODevice::ReadOnly);
QByteArray array=file.readAll();
ui->textEdit->setText(array);
});
当然也能往文件里写内容,用file.write函数.
Qfileinfo信息类可以获取文件的一些信息,包括大小size,类型suffix,文件名filename,文件路径filepath,创建日期,修改日期等。