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()
{
//析构函数
}