QT新手日记024 - QT001程序代码

QT001.H

#ifndef QT001_H

#define QT001_H

#include <QWidget>

class QT001 : public QWidget

{

Q_OBJECT

public:

QT001(QWidget *parent = nullptr);

~QT001();

void mousePressEvent(QMouseEvent *ev);

void mouseMoveEvent(QMouseEvent *ev);

bool event(QEvent *ev);

signals:

void MyMouseSinal(QPoint p);

void MyWheel(int w);

};

#endif // QT001_H

QT001.cpp

#include "qt001.h"

#include<QIcon>

#include<QMouseEvent>

#include<QWidget>

#include<QDebug>

#include<QLabel>

#include<QAction>

#include<QStyleFactory>

QT001::QT001(QWidget *parent)

: QWidget(parent)

{

//对默认生成的空白窗口进行简单设置

//绑定了标题改变信号

connect(this,&QT001::windowTitleChanged ,this,=(){

qDebug() <<"修改了标题内容";

});

//改变当前窗口的尺寸

this->resize(1080,600);

//设定标题内容

this->setWindowTitle("欢迎使用QT开发程序!");

//设定窗口大小,通常在所有的界面控件布局完毕以后进行。

//创建一个标签

QLabel * lb = new QLabel("",this);

//改变标签位置

lb->move(10,10);

//改变标签尺寸

lb->resize(this->width()-20,60);

//设置标签内文本对齐方式

lb->setAlignment(Qt::AlignCenter | Qt::AlignHCenter);

//修改标签字体与大小

lb->setFont(QFont("黑体",30));

//设置标签显示文本内容

lb->setText("欢迎光临QT程序设计演示!");

//通过CSS格式给标签添加边框,黑色,实线,1像素

lb->setStyleSheet("QLabel { border: 1px solid black; }");

//关联自定义的信号(鼠标滚轮转动)用鼠标轮动来改变标准上下位置

connect(this,&QT001::MyWheel,this,=(int w)

{

int ww=lb->y()-w/2;

if(ww<0)

ww=0;

else if(ww>this->height()-lb->height())

ww=this->height()-lb->height();

lb->move(lb->x(),ww);

});

//让鼠标事件对标签透明

lb->setAttribute(Qt::WA_TransparentForMouseEvents,true);//55

//定义一个新标签

QLabel * la = new QLabel("(0,0)",this);

//改变标签尺寸

la->resize(200,40);

//设定标签内容对齐方式

la->setAlignment(Qt::AlignCenter | Qt::AlignRight);

//设置标签对鼠标事件透明

la->setAttribute(Qt::WA_MouseTracking,true);

//设置标签位置

la->move(this->width()-la->width(), this->height()-la->height());

//关联自定义信号,用来设置鼠标位置到标签上。

connect(this,&QT001::MyMouseSinal,this,=(QPoint p){

QString str=QString("(%1,%2)").arg(p.x()).arg(p.y());

la->setText(str);

});

//设定窗口任务栏图标

this->setWindowIcon(QIcon(":/RES/Logo001.ico"));

//改变窗口位置为屏幕中心

this->move((1920-this->width())/2,(1080-this->height())/2);

//使得一启动就开始处理鼠标事件捕捉

setMouseTracking(true);

}

void QT001::mousePressEvent(QMouseEvent *ev)

{

//鼠标按键操作事件捕捉

qDebug()<< ev->type()<<":"<<ev->button();

if(ev->button()==Qt::LeftButton)

{

this->setToolTip("单击过左键!");

}

else if(ev->button()==Qt::RightButton)

{

this->setToolTip("单击过右键!");

}

}

bool QT001 :: event(QEvent *ev)

{

//qDebug()<< ev->type();//type()取得事件类型

if(ev->type()==QEvent::Wheel)

{

//鼠标滚轮转动事件为QWheelEvent事件

QWheelEvent * qw=static_cast<QWheelEvent *>(ev);

qDebug()<<qw->delta();

//将滚动值通过自定义信号发出去。

emit MyWheel(qw->delta());//得到滚动一个刻度的值,一般是+/-120,正为向上,-为向下

return true;

}

//其他事件由父类去执行。

return QWidget::event(ev);

}

void QT001::mouseMoveEvent(QMouseEvent *ev)

{

//鼠标移位置捕捉

//qDebug()<<"("<< ev->x()<<","<<ev->y()<<")";

//当鼠标移动时,将移动的坐标通过信号发出去。

emit MyMouseSinal(ev->pos());

}

QT001::~QT001()

{

//析构函数

}

相关推荐
SomeB1oody6 分钟前
【RustyML入门】3.8. 正则化与归一化层
开发语言·后端·机器学习·rust·教程
__zRainy__9 分钟前
Node系列 · Node基础:全局变量与全局对象
开发语言·前端·javascript
鬼手点金1 小时前
Scrapy + Playwright 完整示例(JS 动态渲染网页)
开发语言·javascript·爬虫·python·scrapy·html·json
Mr. zhihao1 小时前
深度解析:为什么Java序列化需要搭配ByteArrayOutputStream?IO装饰器模式的精妙设计
java·开发语言·装饰器模式
格林威1 小时前
多相机并行采图最佳实践:Task.WhenAll + 异常处理 + 资源释放
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·机器视觉
djjjx.1 小时前
【 C++ 】多态
开发语言·c++·多态
夜雪一千1 小时前
Python如何使用XPath定位没有特征的元素?无id、无class通用定位技巧
开发语言·python
艾莉丝努力练剑1 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
流浪0012 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·python
光影少年2 小时前
react离线缓存、图片缓存方案
开发语言·前端·javascript·react native·react.js·缓存·前端框架