QT学习第4天:qt点击鼠标画一条直线(附源代码和程序)
时间:2022-07-23
本文章向大家介绍QT学习第4天:qt点击鼠标画一条直线(附源代码和程序),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
创建项目名称:TestMouseEvent 在widget.cpp中添加代码
#include "widget.h"
#include "ui_widget.h"
#include <QEvent>
#include<QMouseEvent>
#include <QDebug>
#include <QPainter>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
int i = 0, j = 0;
int jx1[1000], jy1[1000], jx2[1000], jy2[1000];
int xx1=0, yy1=0, xx2=0, yy2=0;
bool Widget::event(QEvent *ev)
{
if ((ev->type() == QEvent::MouseButtonPress)&&(i%2==0))
{
i++;
QMouseEvent *me1 = static_cast<QMouseEvent*> (ev);
相对坐标
//qDebug() << "MouseButtonPress " << me1->x() << ":" << me1->y();
xx1 = me1->x();
yy1 = me1->y();
return QWidget::event(ev);
}
if ((ev->type() == QEvent::MouseButtonPress) && (i % 2 != 0))
{
i++;
QMouseEvent *me2 = static_cast<QMouseEvent*> (ev);
相对坐标
//qDebug() << "MouseButtonPress " << me2->x() << ":" << me2->y();
xx2 = me2->x();
yy2 = me2->y();
}
if (i == 2)
{
i = 0;
//qDebug() << xx1 << ":" << yy1 << "," << xx2 << ":" << yy2;
}
return QWidget::event(ev);
}
void Widget::paintEvent(QPaintEvent *ev)
{
//设置绘制设备 (widget)
QPainter p(this);
p.begin(this);
//绘制文本
//p.drawText(100, 100, QStringLiteral("测试的显示文字"));
//绘制线
//设置画笔样式
QPen pen;
//实线
pen.setStyle(Qt::SolidLine);
//线粗
pen.setWidth(7);
//线刷子
pen.setBrush(Qt::red);
//结尾端样式
pen.setCapStyle(Qt::RoundCap);
//连接处样式
pen.setJoinStyle(Qt::RoundJoin);
p.setPen(pen);
jx1[j] = xx1;
jy1[j] = yy1;
jx2[j] = xx2;
jy2[j] = yy2;
int temp=0;
for(;temp<j;temp++)
{
p.drawLine(QLine(jx1[temp],jy1[temp], jx2[temp], jy2[temp]));
}
p.end();
j++;
}
在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();
bool event(QEvent *ev);
void paintEvent(QPaintEvent *ev);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
ui设计(按钮绑定update()更新槽函数,其他颜色设计无影响)
运行结果
- 人工智能有可能超越人类大脑?
- 一种简单的数据库性能测试方法
- xiaomao.com7位数高价成交,并已启用建站
- Docker基于已有的镜像制新的镜像-Docker for Web Developers(3)
- 如何通过Remoting实现双向通信
- jenkins 入门教程(上)
- 让jQuery Tools Scrollable控件在Mobile Web里面支持resize功能
- CentOS6.5上golang环境配置
- 马斯克频发推文,或在揭示特斯拉明年大动作?
- yum安装出现No package nodejs available解决办法
- InfoPath中repeationg section动态填充数据
- CSS魔法堂:重新认识Box Model、IFC、BFC和Collapsing margins
- jenkins 入门教程(中)
- docker学习(1) 安装
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 助力联邦——Pulsar在Angel PowerFL联邦学习平台中的应用
- 让数据跃然“图”上!腾讯位置服务数据可视化API正式发布
- 腾讯云 Serverless 衔接 Kafka 上下游数据流转实战
- Tensorflow 测试一段能运行在 GPU 的代码
- Tensorflow on HDFS 的实践
- MPI on Kubernetes
- Tensorflow Serving模型指向s3地址,Could not find base path?
- Python之turtle模块初体验
- tcsetpgrp failed重新编译tini
- s3cmd ls之迷惑
- 构建pyflink镜像
- apt-get update遇到NO_PUBKEY
- 遇到mpi worker exited on signal 9
- 容器共享GPU时查看容器使用的GPU编号
- oci runtime error: exec failed: container_linux.go:247: starting container process caused “exec: “/