QT学习笔记(⼗五):QLabel的点击事件(clicked)添加
QT学习笔记(⼗五):QLabel的点击事件(clicked)添加
Qt之添加QLabel的点击事件
QLabel功能为显⽰了⼀个字符串或者图⽚等信息,它本⾝没有click信号。也就不能够响应click点击事件,有什么办法来实现来,我们可以:
第⼀种⽅法:使⽤eventFilter事件过滤器
褪黑素片的功效1)头⽂件添加:
#include <QMouEvent>
public:
bool eventFilter(QObject *obj, QEvent *event);// 添加时间过滤器声明
宪法基本知识2)构造函数添加:
myWidget::myWidget(QWidget *parent):QWidget(parent),ui(new Ui::myWidget)
{
ui->tupUi(this);
ui->label->installEventFilter(this);// 安装事件过滤器
// QFont font ;
// font.tFamily("微软雅⿊"); //字体
// font.tBold(true); //加粗
// font.tItalic(true); //斜体
// font.tStrikeOut(fal); //删除线
// font.tUnderline(true); //下划线
// font.tPointSize(23); //字体⼤⼩
// ui->label->tFont(font);
/
/ 修改标签⽂本格式
ui->label->tText(tr("点击加载图⽚..."));
ui->label->tFont(QFont("微软雅⿊",20,QFont::Bold,true));
//ui->label->tStyleSheet("color:blue"); //⽂本颜⾊(前景⾊)
ui->label_1->tStyleSheet("color:blue; background-color:lightGray;");//设置⽂本颜⾊+背景颜⾊(前景⾊)
}
3)事件过滤器:
bool myWidget::eventFilter(QObject *obj, QEvent *event)
光猫怎么设置{
if(obj == ui->label)//指定某个QLabel双皮奶的简单做法
{
if(event->type()== QEvent::MouButtonPress)//⿏标点击
{
QMouEvent *mouEvent = static_cast<QMouEvent*>(event);// 事件转换
if(mouEvent->button()== Qt::LeftButton)
{
......// 添加代码
......// 添加代码
return true;
}
el
{
return fal;
}
}
el
{
return fal;
}
}
el
{
// pass the event on to the parent class
return QWidget::eventFilter(obj, event);
}
}
第⼆种⽅法:⼦类化QLabel+提升窗⼝部件,重写事件处理函数 mouPressEvent()或event() 1)mylabel.h 添加:
#include <QLabel>
#include <QMouEvent>
class myLabel :public QLabel
{
Q_OBJECT
public:
explicit myLabel(QWidget *parent =0);
protected:
virtual void mouPressEvent(QMouEvent *event);// 重新声明 mouPressEvent 处理函数
protected:
virtual bool event(QEvent *e);// 声明 event()函数
}
化学反应平衡2)mylabel.cpp 添加:
#include <QMessageBox>
// 重写⿏标点击事件 mouPressEvent()
void myLabel::mouPressEvent(QMouEvent *event)
光的折射实验{
//Qt::LeftButton
/
/Qt::RightButton
if(event->button()== Qt::LeftButton)
{
QMessageBox::information(NULL,"单击","单击了我", QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes); }
}
// 重写⿏标事件处理 event()黄冈作业
知否知否应是绿肥红瘦歌曲
bool myLabel::event(QEvent *e)
{
if(e->type()== QEvent::MouButtonPress)
{
QMouEvent *mouEvent = static_cast<QMouEvent*>(e);
if(mouEvent->button()== Qt::LeftButton)
{
QMessageBox::information(NULL,"单击","单击了我",QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
return true;
}
}
return QLabel::event(e);
}
第三种⽅法:信号与槽+提升窗⼝部件
1)mylabel.h 添加:
#include <QLabel>
#include <QMouEvent>
class my_Label :public QLabel
{
Q_OBJECT
public:
explicit my_Label(QWidget *parent =0);// 构造函数声明
protected:
virtual void mouReleaEvent(QMouEvent * ev);// 声明⿏标左键点击事件
signals:
void clicked(void);// 声明⿏标左击中信号
};
2)mylabel.cpp 添加:
my_Label::my_Label(QWidget *parent):QLabel(parent)
{
}
// 重写⿏标释放时间 mouReleaEvent()
void my_Label::mouReleaEvent(QMouEvent *ev)
{
Q_UNUSED(ev)
if(ev->button()== Qt::LeftButton)
{
emit clicked();// 发射信号
}
}
3)Widget.h头⽂件
#include "mylabel.h"
private slots:
void onClicked();// 添加槽声明
4)Widget.cpp源⽂件
#include "myLabel.h"
#include <QMessageBox>
// 构造函数添加
Widget::Widget(QWidget *parent):QWidget(parent),ui(new Ui::Widget)
{
ui->tupUi(this);
// 槽信号关联:
//QObject::connect(ui->label, SIGNAL(clicked()), this, SLOT(onClicked()));
QObject::connect(ui->label,&my_Label::clicked,this,&Widget::onClicked);
}
// 槽函数:
void Widget::onClicked()
{
.......
.......
ui->pushButton_1->click();// 关联pushButton_1按钮点击事件
ui->pushButton_2->click();// 关联pushButton_2按钮点击事件
QMessageBox::information(NULL,"单击","单击了我",QMessageBox::Yes);
}
5)最后在设计模式提升窗⼝部件“label”为“myLabel”类。
PS:实际上⼀个完整的click点击事件,要处理down,move,releae三个事件。代码需要加上以下内容:
...
public void MouDownEvent(...)
public void MouUpEvent(...)
public void MouMoveEvent(...)
...
6)QT中发送⿏标点击事件
QPoint pos=QPoint(5,5);
QMouEvent ev(QEvent::MouButtonPress,pos,Qt::LeftButton,Qt::LeftButton, Qt::NoModifier); QCoreApplication::ndEvent(ui->pushButton,&ev);