在(三)Qlabel显示图片 一文中,在最后我放了一张登陆的图片,图片上有一个链接不知道大家有没有注意到——获取图片验证码
它是一个Qlabel,我希望点击这个label可以重新获取图片验证码,但是label的槽函数中却不包含click()信号,这该怎么处理呢?
其实QT提供了一个非常方便的办法,那就是QMouseEvent鼠标事件,也就是它可以捕获你的鼠标事件,并且传递给事件过滤器。
首先我们要包含一个库
QMouseEvent
然后声明事件过滤器即可
protected:
bool eventFilter(QObject *obj, QEvent *ev);
举个鼠标左键点击事件的例子:
为对应的label安装过滤器:ui->label_3->installEventFilter(this);
实现过滤器的函数:
bool MainWindow::eventFilter(QObject *obj, QEvent *ev)
{
if(obj == ui->label_3)//点击的控件是label_3
{
if(ev->type() == QEvent::MouseButtonPress)//事件类型是鼠标点击事件
{
QMouseEvent *keyEvent = static_cast<QMouseEvent*>(ev);
if(keyEvent->button() == Qt::LeftButton)//点击的类型是左键点击
{
ui->label_picture->setText(QString("nothing"));
}
else if(keyEvent->button() == Qt::RightButton)
{
QPixmap *pixmap = new QPixmap("D:\\method-draw-image.svg");
pixmap->scaled(ui->label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
ui->label_picture->setScaledContents(true);
ui->label_picture->setPixmap(*pixmap);
}
}
}
return false;//如果返回true,ui->label_3不显示,因为事件绘制会被直接截掉
}
点击左键,验证码位置显示nothing,点击右键加载验证码图片