详见
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
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);
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);
}
void Widget::paintEvent(QPaintEvent *event)
{
//创建画家
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::Dense4Pattern);
painter.setBrush(brush);
//利用画家画画
//画线
painter.drawLine(QPoint(0,0),QPoint(100,100));
//画圆(椭圆)
painter.drawEllipse(QPoint(100,100),50,50);
//画矩形
painter.drawRect(QRect(10,10,50,50));
//画字体
painter.drawText(QRect(10,200,150,50),"好好学习,天天向上!");
}
Widget::~Widget()
{
delete ui;
}
main.cpp:
#include "widget.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
//创建画家
QPainter painter(this);
//高级设置
painter.drawEllipse(QPoint(100,100),50,50);
//设置抗锯齿,效率低
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(200,100),50,50);
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
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,100),50,50);
// //设置抗锯齿,效率低
// painter.setRenderHint(QPainter::Antialiasing);
// painter.drawEllipse(QPoint(200,100),50,50);
painter.drawRect(QRect(20,20,50,50));
//移动画家
painter.translate(QPoint(100,0));
//保存状态
painter.save();
painter.drawRect(QRect(20,20,50,50));
painter.translate(QPoint(100,0));
//取出状态
painter.restore();
painter.drawRect(QRect(20,20,50,50));
// //设置画笔颜色
// QPen pen(QColor(255,0,0));
// //设置笔宽度
// pen.setWidth(3);
// //设置笔风格
// pen.setStyle(Qt::DotLine);
// //画家要用这只笔
// painter.setPen(pen);
// //画刷填充颜色
// QBrush brush(Qt::cyan);
// //让画家使用画刷
// brush.setStyle(Qt::Dense4Pattern);
// painter.setBrush(brush);
// //利用画家画画
// //画线
// painter.drawLine(QPoint(0,0),QPoint(100,100));
// //画圆(椭圆)
// painter.drawEllipse(QPoint(100,100),50,50);
// //画矩形
// painter.drawRect(QRect(10,10,50,50));
// //画字体
// painter.drawText(QRect(10,200,150,50),"好好学习,天天向上!");
}
Widget::~Widget()
{
delete ui;
}
首先为项目添加资源文件qrc
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
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"QPushButton"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//点击移动按钮,移动图片
posX=10;
connect(ui->pushButton,&QPushButton::clicked,[=](){
posX+=10;
//手动调用绘图事件
update();
});
}
void Widget::paintEvent(QPaintEvent *event)
{
//创建画家
QPainter painter(this);
//画图片
painter.drawPixmap(posX,10,QPixmap(":/images/1.jpg"));
//如果出屏幕,强制变回10
if(posX>this->width())
{
posX=10;
}
//高级设置
// painter.drawEllipse(QPoint(100,100),50,50);
// //设置抗锯齿,效率低
// painter.setRenderHint(QPainter::Antialiasing);
// painter.drawEllipse(QPoint(200,100),50,50);
// painter.drawRect(QRect(20,20,50,50));
// //移动画家
// painter.translate(QPoint(100,0));
// //保存状态
// painter.save();
// painter.drawRect(QRect(20,20,50,50));
// painter.translate(QPoint(100,0));
// //取出状态
// painter.restore();
// painter.drawRect(QRect(20,20,50,50));
// //设置画笔颜色
// QPen pen(QColor(255,0,0));
// //设置笔宽度
// pen.setWidth(3);
// //设置笔风格
// pen.setStyle(Qt::DotLine);
// //画家要用这只笔
// painter.setPen(pen);
// //画刷填充颜色
// QBrush brush(Qt::cyan);
// //让画家使用画刷
// brush.setStyle(Qt::Dense4Pattern);
// painter.setBrush(brush);
// //利用画家画画
// //画线
// painter.drawLine(QPoint(0,0),QPoint(100,100));
// //画圆(椭圆)
// painter.drawEllipse(QPoint(100,100),50,50);
// //画矩形
// painter.drawRect(QRect(10,10,50,50));
// //画字体
// painter.drawText(QRect(10,200,150,50),"好好学习,天天向上!");
}
Widget::~Widget()
{
delete ui;
}
main.cpp:
#include "widget.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
绘图设备是继承自QPaintDevice类的子类,QT一共提供了四个绘图设备类:
(1)QPixmap专门为图像在不同屏幕(平台)上的显示做了优化
(2)QBitmap是QPixmap的一个子类,它的色深限制为1,可以使用QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap
(3)QImage专门为图像的像素级访问做出优化
(4)QPicture则可以记录和重现QPainter的各条命令,保存的图像格式为任意(自定义)格式
详见
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
/*################QPixmap绘图设备:专门为平台做了显示优化###############*/
//(1)QPixmap绘图设备
//#include
QPixmap pix(300,300);
pix.fill(Qt::white);
//(2)声明画家
//#include
QPainter painter(&pix);//绘图设备和画笔绑定
//(3)绘制
painter.setPen(QPen(Qt::green));
painter.drawEllipse(QPoint(150,150),100,100);
//(4)保存
pix.save("D:\\pixmap.png");
}
Widget::~Widget()
{
delete ui;
}
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
/*################QImage绘图设备:可以对像素进行操作###############*/
//(2)QImage绘图设备
//#include
QImage img(300,300,QImage::Format_RGB32);
img.fill(Qt::white);
//(2)声明画家
//#include
QPainter painter(&img);//绘图设备和画笔绑定
//(3)绘制
painter.setPen(QPen(Qt::blue));
painter.drawEllipse(QPoint(150,150),100,100);
//(4)保存
img.save("D:\\img.png");
}
Widget::~Widget()
{
delete ui;
}
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
/*################QImage绘图设备:可以对像素进行操作###############*/
//(2)QImage绘图设备
//#include
QImage img(300,300,QImage::Format_RGB32);
img.fill(Qt::white);
//(2)声明画家
//#include
QPainter painter(&img);//绘图设备和画笔绑定
//(3)绘制
painter.setPen(QPen(Qt::blue));
painter.drawEllipse(QPoint(150,150),100,100);
//(4)保存
img.save("D:\\img.png");
}
//重写绘图事件
void Widget:: paintEvent(QPaintEvent *ev)
{
//利用QImage对像素进行修改
//(1)创建设备
QImage img;
img.load(":/image/1.png");
//(2)创建画笔
QPainter painter(this);
//(3)修改像素点
for(int i=50;i<100;i++)
{
for (int j=50;j<100;j++)
{
QRgb value=qRgb(0,255,0);
img.setPixel(i,j,value);
}
}
//(4)绘图
painter.drawImage(0,0,img);
}
Widget::~Widget()
{
delete ui;
}
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
/*################QPicture绘图设备:可以记录和重新绘图指令###############*/
//(1)QPicture绘图设备
//#include
QPicture pic;
//(2)声明画家
//#include
QPainter painter(&pic);//绘图设备和画笔绑定
//(3)开始绘制
painter.begin(&pic);//开始在pic设备上绘画
painter.setPen(QPen(Qt::red));
painter.drawEllipse(QPoint(150,150),100,100);
//(4)结束绘制
painter.end();
//(5)保存
pic.save("D:\\pic.zt");
}
Widget::~Widget()
{
delete ui;
}
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
/*################QPicture绘图设备:可以记录和重现绘图指令###############*/
//(1)QPicture绘图设备
//#include
QPicture pic;
//(2)声明画家
//#include
QPainter painter(&pic);//绘图设备和画笔绑定
//(3)开始绘制
painter.begin(&pic);//开始在pic设备上绘画
painter.setPen(QPen(Qt::red));
painter.drawEllipse(QPoint(150,150),100,100);
//(4)结束绘制
painter.end();
//(5)保存
pic.save("D:\\pic.zt");
}
void Widget:: paintEvent(QPaintEvent *ev)
{
//(1)重现QPicture绘图指令
QPicture pic;
pic.load("D:\\pic.zt");
//(2)创建画笔
QPainter painter(this);
//(3)绘图
painter.drawPicture(0,0,pic);
}
Widget::~Widget()
{
delete ui;
}
详见
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include"QFileDialog"
#include"QMessageBox"
#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\\13446\\Desktop");
if(path.isEmpty()){
QMessageBox::warning(this,"警告","打开失败");
}
else
{
//将路径放入lineEdit
ui->lineEdit->setText(path);
//读取文件 QFile默认支持UTF-8格式
//设置 gbk格式
//QTextCodec * codec = QTextCodec::codecForName("gbk");
QFile file(path);//参数路径名称
//指定打开方式(只读)
//file.open(QIODevice::ReadOnly);
file.open(QFileDevice::ReadOnly);
QByteArray array;
//一次性读
array = file.readAll();
//一行行读
// while(!file.atEnd())
// {
// array+=file.readLine();
// }
//设置到文本编框中
ui->textEdit->setText(array);
//读gbk
//ui->textEdit->setText(codec->toUnicode(array));
file.close();
//写文件
//重新指定打开方式
file.open(QFileDevice::Append);//追加模式
file.write("aaaaaaa");
file.close();
}
});
}
Widget::~Widget()
{
delete ui;
}
//***************QFileInfo文件信息类#####################//
QFileInfo info(path);
qDebug()<<"文件大小:"<
qDebug()<<"创建日期:"<
//文件流读写文件
//分类:文本流(基础数据类型) 和 数据流(大型QImage)
//文本流
QFile file("aaa.txt");
file.open(QFileDevice::WriteOnly);
QTextStream stream(&file);
stream<>str;//读取空格,结束
str = stream.readAll();
qDebug()<>str>>num; //以块的方式读取
qDebug()<