#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
#include<QBitmap>
#include<QPixmap>
#include <QMouseEvent>
#include <QMessageBox>
#include <QLabel>
#include<QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QPixmap pm; pm.load(":/picture/Image/s.png");
ui->label->setGeometry(0,0,pm.width(), pm.height());
ui->label->setPixmap(pm);
int i=connect(this, SIGNAL(clicked()), this, SLOT(slotClicked())); //信号连接
qDebug()<<i<<endl;
}
Widget::~Widget()
{
delete ui;
}
void Widget::mousePressEvent(QMouseEvent *e)
{
int x = e->x();
int y = e->y();
//假如在QRect( 0, 0, 48, 48 )这个区域里(图片大小为48X48),就发出信号
if (x>0 && x<48 && y>0 && y<48){
emit clicked();
}
}
void Widget::slotClicked()
{
QMessageBox::about( this, "Mouse Example", "You have pressed mouse, exit now!");
close();
}
最后显示为0,证明那个槽连接不了,为什么会出现这种现象
------解决方案--------------------
应该重写QLabel派生类的mousePressEvent(QMouseEvent *e),现在是重写的QLabel的parent
------解决方案--------------------
继承QLabel写一个类
class xxxx :public QLabel
{
xxxxx();
protected:
void mousePressEvent(QMouseEvent *e);
}
------解决方案--------------------
请参考我的博客,有篇文章是:
Qt QLineEdit QLabel添加clicked事件
http://www.jyguagua.com/?p=668
看完你就懂怎么去实现QLabel的点击事件了.
------解决方案--------------------
int i=connect(this, SIGNAL(clicked()), this, SLOT(slotClicked()));//这个不需要了
if (x>0 && x<48 && y>0 && y<48)
{
emit clicked();//不需要用自定义信号了,直接在这里调用slotClicked()就可以啊。
}