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()

{

//析构函数

}

相关推荐
码农水水7 小时前
国家电网Java面试被问:TCP的BBR拥塞控制算法原理
java·开发语言·网络·分布式·面试·wpf
浮尘笔记7 小时前
Go语言临时对象池:sync.Pool的原理与使用
开发语言·后端·golang
咕噜咕噜啦啦7 小时前
Java期末习题速通
java·开发语言
BHXDML8 小时前
第七章:类与对象(c++)
开发语言·c++
梦梦代码精8 小时前
BuildingAI vs Dify vs 扣子:三大开源智能体平台架构风格对比
开发语言·前端·数据库·后端·架构·开源·推荐算法
又见野草9 小时前
C++类和对象(中)
开发语言·c++
kgduu9 小时前
js之表单
开发语言·前端·javascript
钊兵9 小时前
java实现GeoJSON地理信息对经纬度点的匹配
java·开发语言
毕设源码-钟学长9 小时前
【开题答辩全过程】以 基于Python的健康食谱规划系统的设计与实现为例,包含答辩的问题和答案
开发语言·python