当前位置: 代码迷 >> QT开发 >> 怎么把QLabel改成按钮 !
  详细解决方案

怎么把QLabel改成按钮 !

热度:31   发布时间:2016-04-25 04:06:12.0
如何把QLabel改成按钮 !!!
#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派生类的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()就可以啊。
 }