QT自定义控件--事件无法响应问题

一尺丈量 2015-11-30 10:29:46
大家好,本人初学QT,在开发时遇到了一点小问题。问题如下:
首先有两个类:Widget和applabel,都是继承自QWidget,Widget类实现为一个大的容器,可以加入label等。applabel是一个自定义Label,里面有一个QLabel指针,现在我将new出来的applabel增加到Widget中,但只有Widget中的事件和applabel中的event事件可以响应,applabel中的其他事件无法响应,请问是何解?还有就是一般要怎么样实现自定义的QT控件,使得各种事件都正常响应,比如如何自定义一个label呢?下面附件源代码。
#include <QWidget>
#include <QLabel>
#include <QVector>
#include "applabel.h"


class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
explicit Widget(qint32 label_amount, QWidget *parent = 0);
~Widget();
public:
void addWidget(AppLabel *label);
void rePlace();
bool event(QEvent *);
void mousePressEvent(QMouseEvent *);
private:
qint32 _lbl_amount;
qint32 _lbl_bottom_Single_width;
QVector<AppLabel *> _labels;

};

#endif // WIDGET_H

下面是applabel类
mousePressEvent(QMouseEvent *);和void mouseReleaseEvent(QMouseEvent *);无法响应。

#ifndef APPBUTTON_H
#define APPBUTTON_H

#include <QWidget>
#include <QLabel>


class AppLabel : public QWidget
{
Q_OBJECT
public:
explicit AppLabel(QWidget *parent = 0);
explicit AppLabel(QString text, QWidget *parent = 0);
private:
QLabel *_label;//main object.
public:
bool event(QEvent *);
void mousePressEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
signals:

public slots:

};

#endif // APPBUTTON_H


applabel是通过下面的方法添加到Widget类中的。
void Widget::addWidget(AppLabel *label)
{
++this->_lbl_amount;
this->_lbl_bottom_Single_width = this->width() / this->_lbl_amount;
label->setParent(this);

_labels.push_back(label);
label->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter);
label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
QString style("background-color:#DFDDDE;");
//connect(label, SIGNAL(clicked()), this, SLOT());
label->setStyleSheet(style);
this->rePlace();
}
...全文
707 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一尺丈量 2015-11-30
  • 打赏
  • 举报
回复
引用 3 楼 u013466477 的回复:
[quote=引用 2 楼 u010155023 的回复:] 我在bool event()中返回了QWidget::event(event)。
回复先引用 那有没有地方返回false?? 我看你两个类都重写了bool event(QEvent *); 如果不是很复杂,推荐不要重写bool event(QEvent *);[/quote] 问题解决了,是因为:上层(Widget)的bool event()截取了事件,导致不能传到下层(applabel)的bool event()中去。。。
冷静忍耐 2015-11-30
  • 打赏
  • 举报
回复
引用 2 楼 u010155023 的回复:
我在bool event()中返回了QWidget::event(event)。
回复先引用 那有没有地方返回false?? 我看你两个类都重写了bool event(QEvent *); 如果不是很复杂,推荐不要重写bool event(QEvent *);
一尺丈量 2015-11-30
  • 打赏
  • 举报
回复
我在bool event()中返回了QWidget::event(event)。
冷静忍耐 2015-11-30
  • 打赏
  • 举报
回复
无法响应是被你的bool event(QEvent *);这个事件截取了吧,要返回true; 一般没有特殊情况不需要重写bool event(QEvent *); 其他事件应该足够了吧

16,815

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧