自定义控件封装:
添加新文件-》qt-》qt面类-》。。。
在主界面 拖拽一个widget,右键提升,添加基类,名称要一样,提升完成后ok。
connect(ui->slider,&QSlider::valueChanged,ui->spin,&QSpinBox::setValue); 关联
void (QSpinBox:: * valuep)(int) = &QSpinBox::valueChanged; 指定多定义函数中的地址
connect(ui->spin,valuep,ui->slider,&QSlider::setValue); 关联
事件:
声明类,重写虚方法,自带组件需要提升为声明类
void enterEvent(QEvent *event); 鼠标进入
void leaveEvent(QEvent *event); 鼠标离开
void mouseMoveEvent(QMouseEvent *ev); 鼠标按下移动
void mousePressEvent(QMouseEvent *ev); 鼠标按下
void mouseReleaseEvent(QMouseEvent *ev); 鼠标松开
void timerEvent(QTimerEvent *event); 时间定时器 需要startTimer(1000)启动定时器
if( ev->button() == Qt::LeftButton) 如果点击鼠标左键
qDebug()<< QString("Mouse value is: x--%1--y%2--").arg(ev->x()).arg(ev->y()) <<endl; 打印鼠标xy坐标
if( ev->buttons() & Qt::LeftButton) 判断持续状态中 是否点击左键
this->setMouseTracking(true); 设置鼠标追踪 不需要点击也能探测到
QTimer * timer = new QTimer(this); 时间定时器类
timer->start(500); 设置定时时间,开启时钟
connect(timer,&QTimer::timeout,[=](){ 连接定时内容
ui->time->setText("time:"+QString::number(num++));
});
事件分发器:执行在事件之前
bool event(QEvent *e); 事件分发器
bool LableEvent::event(QEvent *e){ 实现分发器
if(e->type() == QEvent::MouseButtonPress){ 如果鼠标按下会拦截信息
QMouseEvent *ev = static_cast<QMouseEvent *>(e); 指针强转 static_cast<>
qDebug()<<"mouse down"<< QString(":x--%1--y--%2").arg(ev->x()).arg(ev->y());
return true;
}
return QLabel::event(e); 向其父类继续分发;
}
事件过滤器:执行在分发之前(两步)
1.给对应的组件安装事件过滤器 ui->label->installEventFilter(this);
2.重写eventFilter
2.1 声明 bool eventFilter(QObject *watched, QEvent *event);
2.2 实现 bool MainWindow::eventFilter(QObject *watched, QEvent *event){
if(ui->label == watched){
if(event->type() == QEvent::MouseButtonPress){
QMouseEvent * ev = static_cast<QMouseEvent *>(event);
qDebug()<<"dianji:"<<QString("x--%1--y--%2").arg(ev->x()).arg(ev->y());
return true;
}
}
return QWidget::eventFilter(watched,event);
}
绘图事件:
void paintEvent(QPaintEvent *event); 添加绘图事件
QPainter painter(this); 创建画家
QPen pen(QColor(255,0,0)); 创建画笔
pen.setWidth(5); 设置笔粗
pen.setStyle(Qt::DotLine); 设置风格
painter.setPen(pen); 画家拿起画笔
painter.drawLine(QPoint(0,0),QPoint(400,400)); 画线
painter.drawEllipse(QPoint(300,300),100,100); 画椭圆
QBrush brush(Qt::green); 创建画刷
brush.setStyle(Qt::Dense6Pattern); 设置画刷风格
painter.setBrush(brush); 画家拿起画刷
painter.drawRect(QRect(200,100,100,50)); 画四角形
painter.drawText(QRect(350,100,100,100),"wossdfgsfsdfaf,dfghihaoren!"); 画文字
QPainter painter(this); 创建画家
painter.drawEllipse(QPoint(200,200),100,100); 画圆
painter.setRenderHint(QPainter::Antialiasing); 设置抗锯齿能力
painter.save(); 保存画家当前状态
painter.translate(QPoint(200,0)); 将画家向右移动
painter.drawEllipse(QPoint(200,200),100,100); 画圆
painter.restore(); 画家状态恢复
painter.drawPixmap(0,0,postionx,this->height(),QPixmap(":/textures/yaowei.jpg")); 绘制图片
update(); 更新绘图事件;
绘图设备
QPixmap 正常图片,QBitmap 灰度图,QImage 为像素点做优化 QPicture 记录和重现QPainter指令
QPixmap pix(300,300); 创建白纸
pix.fill(Qt::white); 填充白纸
QPainter painter(&pix); 创建画家到指定白纸
painter.setPen(QPen(QColor(255,0,0),10)); 设置画笔
painter.drawEllipse(QPoint(150,150),100,100); 画圆
pix.save("../pix.png"); 保存目录
QImage image(300,300,QImage::Format_ARGB32); 创建一个QImage 格式为argb32
image.fill(Qt::white); 图片填充色为白色
QPainter painter(&image); 设置画家在这个画布上绘制
painter.setPen(QPen(Qt::red,0)); 设置画笔
painter.drawEllipse(QPoint(150,150),100,100); 画圆
image.save("../image.png"); 将图片保存到本地
QPicture pic; 创建QPicture
QPainter painter; 创建画家
painter.begin(&pic); 图片开始保护绘制
painter.setPen(QPen(Qt::red,5)); 设置画笔
painter.drawEllipse(QPoint(150,150),100,100); 画圆
painter.end(); 图片完成绘制保护
pic.save("../image.wd"); 图片保存到本地
QPicture pic; 创建图片
pic.load("../image.wd"); 加载命令文本
QPainter painter(this); 创建画师
painter.drawPicture(0,0,pic); 画图(执行文件中的指令)
读写文件:
QString s = QFileDialog::getOpenFileName(this,"ReadFile","/home/wandong","(*.txt)"); //打开资源管理器对话框
if(s != ""){
QTextCodec * cde = QTextCodec::codecForName("gbk"); 设置文件格式
QFile file(s) ; 创建文件
file.open(QIODevice::ReadOnly); 只读方式打开文件
QByteArray arr; 声明字符串数数组
// arr = file.readAll(); 读取文件
// ui->textEdit->setText(cde->toUnicode(arr)); 指定格式设置文字
while (!file.atEnd()) { 按行读取
arr += file.readLine();
}
ui->textEdit->setText(arr); 设置文件
file.close(); 关闭文件
file.open(QIODevice::Append); 追加方式打开文件
file.write("shdfsjadlf;asjdkfaaaaaaaaaa"); 文件写入
file.close(); 文件关闭
QFileInfo info(s); 文件信息
data +=("info.fileName:"+ info.fileName()+"\n"); 文件名字
data +=( "info.filePath:"+ info.filePath()+"\n"); 文件路径
data +=("info.size:" +QString::number(info.size())+"\n"); 文件的大小
data +=("info.suffix:"+ info.suffix()+"\n"); 文件的后缀名
data +=("info.created:"+info.created().toString("yyyy/MM/dd hh:mm:ss")+"\n" ); 文件的创建日期
data +=("info.lastModified:"+info.lastModified().toString("yyyy/MM/dd hh:mm:ss")+"\n" ); 文件的最后修改时间 时间格式
创建目录
QDir *folder = new QDir; 声明一个目录
bool exist = folder->exists("D:/NewFolder"); 判断路径是否存在
bool ok = folder->mkdir("D:/NewFolder"); 创建文件夹