标题:各位高手帮忙看下Label写的一个程序
作者:darkhucx
日期:2006-05-13 08:18
内容:
#ifndef LAB_H
#define LAB_H
#include
#include
#include
#include
class Lab : public QLabel
{
Q_OBJECT
public:
Lab( QLabel *parent=0, const char *name=0 );
public slots:
void PressChange(QMouseEvent *);
void ReleaseChange(QMouseEvent *);
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
private:
QLabel *la;
bool state;
QPixmap pix1;
QPixmap pix2;
};
#endif
#include
#include
#include
#include
#include "lab.h"
Lab::Lab(QLabel *parent, const char *name)
:QLabel(parent, name)
{
QPixmap pix3("STOP_BTN.png");
la = new QLabel("hello", this);
//la->setIcon(pix3);
la->setBackgroundColor(QColor(100,100,100));
la->setGeometry(0,0,100,100);
//pix1 = pix3;
//QPixmap pix4("PLAY_BTN.png");
//pix2 = pix4;
//state = false;
}
void Lab::mousePressEvent(QMouseEvent *e)
{
PressChange(e);
emit clicked();
}
void Lab::mouseReleaseEvent(QMouseEvent *e )
{
ReleaseChange(e);
emit clicked();
}
void Lab::PressChange(QMouseEvent *e)
{
QPixmap pix1("PLAY_BTN.png");
QPixmap pix2("STOP_BTN.png");
switch(e->button())
{
case Qt::LeftButton:
la->setText("OK!!");
la->setGeometry(0,0,100,100);
//la->show();
break;
&nbs ..
#1 [darkhucx 05-13 08:22]
我想把鼠标的clicked事件映射到Label里而不是在窗体上 有办法吗 各位高手麻烦帮忙看看啊
#2 [darkhucx 05-13 08:26]
现在点击窗体外都可以响应鼠标的clicked事件 但是在label里不行
#3 [tieliu 05-17 14:01]
1.因为你点击里面的Label时,系统把鼠标消息发送给了里面的QLabel,也就是说
Lab::la->MousePressEvent()将会被调用,而不可能调用Lab::MousePressEvent()。
2.你现在在派生的Lab类里增加了一个QLabel* la成员,这样做没什么意义。
不用再Lab中再嵌套一个QLabel,而是直接用Lab类本身就行了。
3.既然已经在mousePressEvent中调用了PressChange(e),没有必要再
写QObject::connect( clicked(),.....SLOT(PressChanged(e)这一句。这相当于调用了两次 PressChanged()函数。
connect( clicked(), ReleaseChanged()) 也有同样的问题!
4.你有一个地方拼写错误:把..connect( clicked(), ...SLOT(PressChanged(.)写成了..connect( clicked(), ...SLOT(PixChanged(.)