• 5909阅读
  • 3回复

[提问]控件遮挡问题(已解决) [复制链接]

上一主题 下一主题
离线liuxu_lx7
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-11

蓝色框起来的是个 QFrame(我需要在上面画点东西)。
我想让QFrame不拦截鼠标单击事件(为了能按到下面的QPushButton)。
但是,现在QFrame把QPushButton的单击事件遮挡了(把QFrame设置成 enable = false并不能解决这个问题)。
请问,应该怎么实现,置顶的控件不拦截鼠标事件呢?

我还采用过,给QFrame派生,并重载mousePressEvent(QMouseEvent *event), 函数里什么也不写。但事件依旧被拦截了。

cusFrame是覆盖在Button上面的Frame
  1. #include <QtGui/QDialog>
  2. #include "ui_painter01.h"
  3. #include <QFrame>
  4. class cusFrame : public QFrame
  5. {
  6.     Q_OBJECT
  7. public:
  8.     cusFrame(QWidget* parent): QFrame(parent){}
  9.     void    paintEvent(QPaintEvent *);
  10.     void    mousePressEvent(QMouseEvent *event);
  11.         
  12. };
  13. class painter01 : public QDialog
  14. {
  15.     Q_OBJECT
  16. public:
  17.     painter01(QWidget *parent = 0, Qt::WFlags flags = 0);
  18.     ~painter01();
  19. private:
  20.     Ui::painter01Class ui;
  21.     cusFrame*            m_Frame;
  22. };
  23. #include "painter01.h"
  24. #include <QPainter>
  25. #include <QPushButton>
  26. painter01::painter01(QWidget *parent, Qt::WFlags flags)
  27.     : QDialog(parent, flags)
  28. {
  29.     ui.setupUi(this);
  30.     QPushButton* pbnt;
  31.     pbnt = new QPushButton(this);
  32.     pbnt->resize(150,150);
  33.     pbnt->move(250,250);
  34.     m_Frame = new cusFrame(this);
  35.     m_Frame->move(200, 200);
  36.     m_Frame->resize(500,500);    
  37. }
  38. painter01::~painter01()
  39. {
  40. }
  41. void cusFrame::paintEvent(QPaintEvent * event)
  42. {
  43.     QPainter painter(this);
  44.     QPen pen;
  45.     pen.setColor(QColor(255,0,0));
  46.     QBrush brush(QColor(0, 255,0,125));
  47.     painter.setPen(pen);
  48.     painter.setBrush(brush);
  49.     painter.drawRect(100,100,200,200);
  50. }
  51. void cusFrame::mousePressEvent(QMouseEvent *event)
  52. {
  53. }

结果图如下:
[ 此帖被liuxu_lx7在2011-05-11 14:11重新编辑 ]
离线cutemmll
只看该作者 1楼 发表于: 2011-05-11
假设你的QFrame 定义为 QFrame* frame;

调用下面的函数
  1. frame->setAttribute(Qt::WA_TransparentForMouseEvents);

c------------enjoy qt & enjoy life-----------++
离线jdwx

只看该作者 2楼 发表于: 2011-05-11
QFrame就是一个框,给控件分组,应该先画QFrame,再画控件,拖动QFrame控件跟着一块动。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线liuxu_lx7
只看该作者 3楼 发表于: 2011-05-11
回 1楼(cutemmll) 的帖子
啊,感谢1楼。。 成功了。 Thanks~~
[ 此帖被liuxu_lx7在2011-05-11 14:12重新编辑 ]
快速回复
限100 字节
 
上一个 下一个