• 5530阅读
  • 9回复

奇怪的PushButton 的move消息 [复制链接]

上一主题 下一主题
离线yxhappy
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-11
我发现了一个奇怪的问题,不是太明白,我把两个按钮紧挨着放着,鼠标从一个按钮拖动的另一个按钮,按钮的父对象竟然接受到了mousemove的消息,这是怎么回事呢?怎么不让这个mousemove消息发送呢?
[ 此帖被yxhappy在2009-12-11 10:51重新编辑 ]
离线yxhappy
只看该作者 1楼 发表于: 2010-01-07
up!
可不可以不让button接受mousemove消息呀?
离线benbenmajia

只看该作者 2楼 发表于: 2010-01-07
没看懂什么意思
安然.....
离线dbzhang800

只看该作者 3楼 发表于: 2010-01-07
没看明白你的意思
离线xtfllbl

只看该作者 4楼 发表于: 2010-01-07
呵呵,mousemove这个消息只要你移动鼠标就会发送的,你不想他发送是不可能的,但是你可以自己装个事件过滤器,把它过滤掉就可以了。
上海欢迎您
离线wd007

只看该作者 5楼 发表于: 2010-01-07
没错,这样操作是要发送mousemove这个消息的。
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线hackself
只看该作者 6楼 发表于: 2010-01-08
这种问题没必要研究.
离线午小夜

只看该作者 7楼 发表于: 2010-01-08
void QWidget::mouseMoveEvent ( QMouseEvent * event )   [virtual protected]
This event handler, for event event, can be reimplemented in a subclass to receive mouse move events for the widget.
If mouse tracking is switched off, mouse move events only occur if a mouse button is pressed while the mouse is being moved. If mouse tracking is switched on, mouse move events occur even if no mouse button is pressed.

See also setMouseTracking()
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线yxhappy
只看该作者 8楼 发表于: 2010-01-11
引用第4楼xtfllbl于2010-01-07 17:34发表的  :
呵呵,mousemove这个消息只要你移动鼠标就会发送的,你不想他发送是不可能的,但是你可以自己装个事件过滤器,把它过滤掉就可以了。

请问这个事件过滤器要怎么做呢?能详细点吗?
离线xtfllbl

只看该作者 9楼 发表于: 2010-01-11
引用第8楼yxhappy于2010-01-11 10:00发表的  :
请问这个事件过滤器要怎么做呢?能详细点吗?

bool QObject::eventFilter ( QObject * watched, QEvent * event )   [virtual]

Filters events if this object has been installed as an event filter for the watched object.

In your reimplementation of this function, if you want to filter the event out, i.e. stop it being handled further, return true; otherwise return false.

Example:
  1. class MainWindow : public QMainWindow
  2. {
  3. public:
  4.      MainWindow();
  5. protected:
  6.      bool eventFilter(QObject *obj, QEvent *ev);
  7. private:
  8.      QTextEdit *textEdit;
  9. };
  10. MainWindow::MainWindow()
  11. {
  12.      textEdit = new QTextEdit;
  13.      setCentralWidget(textEdit);
  14.      textEdit->installEventFilter(this);
  15. }
  16. bool MainWindow::eventFilter(QObject *obj, QEvent *event)
  17. {
  18.      if (obj == textEdit) {
  19.          if (event->type() == QEvent::KeyPress) {
  20.              QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
  21.              qDebug() << "Ate key press" << keyEvent->key();
  22.              return true;
  23.          } else {
  24.              return false;
  25.          }
  26.      } else {
  27.          // pass the event on to the parent class
  28.          return QMainWindow::eventFilter(obj, event);
  29.      }
  30. }
上海欢迎您
快速回复
限100 字节
 
上一个 下一个