Qt creator中如何用鼠标事件来实现按键响应

cgq865752626 2012-07-31 01:13:17
Qt creator中放了个按键,,现在我想用鼠标点击来实现响应,但是不想用信号槽来实现,想用鼠标按下事件来实现,请高手解答如何做??谢谢
...全文
677 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiebin133 2012-07-31
  • 打赏
  • 举报
回复
那你装事件过滤器吧

m_pushButton->installEventFilter(this);

bool MainWindow::eventFilter(QObject *o, QEvent *e)
{
if(o == ui->pushButton)
{
if(e->type() == QEvent::MouseButtonPress)
{
//进行事件处理
}
}
return false;
}
SilenceSu 2012-07-31
  • 打赏
  • 举报
回复
声明下、我这个事件是鼠标划过事件。然后鼠标按下事件 自己去写就OK了
SilenceSu 2012-07-31
  • 打赏
  • 举报
回复
然后我直接接受这个信号就可以


CustomButton *button=new CustomButton();


connect(button,SIGNAL(mouseEnter()),this,SLOT("该怎么处理就怎么处理"));


SilenceSu 2012-07-31
  • 打赏
  • 举报
回复
你现在的这个mousePressEvent 是响应的主窗口的QMainWindow、而不是QPushButton的mousePressEvent .
应该重写一个button类 继承QPushButton 然后响应他的mousePressEvent 事件。

给你一个例子,我是把mousePressEvent 作为信号传递的


//.h文件

#ifndef NEWBUTTON_H
#define NEWBUTTON_H

#include <QPushButton>
#include <QEvent>
#include <QPoint>
class CustomButton : public QPushButton
{
Q_OBJECT
public:
explicit CustomButton(QWidget *parent = 0);
private:
void enterEvent(QEvent *e);
void leaveEvent(QEvent *e);



signals:
void mouseEnter();
void mouseLeave();

public slots:

};

#endif // NEWBUTTON_H






//.cpp


#include "CustomButton.h"
#include <QDebug>

CustomButton::CustomButton(QWidget * parent) :
QPushButton(parent)
{
}
void CustomButton::enterEvent(QEvent *e){
emit mouseEnter();
}
void CustomButton::leaveEvent(QEvent *e){
emit mouseLeave();
}






[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:
引用 3 楼 的回复:
应该是自定义了一个button

类似于

C/C++ code
QPushButton *m_pushButton=new QPushButton



引用 2 楼 的回复:

能不能讲详细一点呢?不好意思,我还是菜鸟,你说的那个m_pushButton从哪里定义出来的。。能简单举个例子吗?谢谢

+1,定义一个……
[/Quote]
cgq865752626 2012-07-31
  • 打赏
  • 举报
回复
#include "mynumber.h"
#include "ui_mynumber.h"

Mynumber::Mynumber(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Mynumber)
{
ui->setupUi(this);
m_pushButton=new QPushButton("exit",this);
m_pushButton->setGeometry(300,100,80,40);
}

Mynumber::~Mynumber()
{
delete ui;
}

void Mynumber::mousePressEvent(QMouseEvent *e)
{

if(m_pushButton->hasFocus())
{
ui->lineEdit->setText("123");

}
}


我是想着按下这个按钮之后就在lineedit里写入123.但是我点击这个按钮之后不会立即写上,而是我点击界面空白处才写上,点一下就写入一下,完全不是理想中的那样。。求解释
xiebin133 2012-07-31
  • 打赏
  • 举报
回复
你贴下你mousePressEvent里面的代码出来看看。
cgq865752626 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 3 楼 的回复:
应该是自定义了一个button

类似于

C/C++ code
QPushButton *m_pushButton=new QPushButton



引用 2 楼 的回复:

能不能讲详细一点呢?不好意思,我还是菜鸟,你说的那个m_pushButton从哪里定义出来的。。能简单举个例子吗?谢谢

+1,定义一个按钮,在鼠标点击事件里面判断焦……
[/Quote]

我照着你们说的做了,但是鼠标点击那个按钮之后,他没实现响应。。倒是点击界面空白处时才响应。。之后居然一直是那个响应了??真心不懂。。
cgq865752626 2012-07-31
  • 打赏
  • 举报
回复
现在还没解决啊。。谁能帮帮我啊??
xiebin133 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
应该是自定义了一个button

类似于

C/C++ code
QPushButton *m_pushButton=new QPushButton



引用 2 楼 的回复:

能不能讲详细一点呢?不好意思,我还是菜鸟,你说的那个m_pushButton从哪里定义出来的。。能简单举个例子吗?谢谢
[/Quote]
+1,定义一个按钮,在鼠标点击事件里面判断焦点是否在该按钮上,如果在,则进行事件处理。
SilenceSu 2012-07-31
  • 打赏
  • 举报
回复
应该是自定义了一个button

类似于
QPushButton *m_pushButton=new QPushButton


[Quote=引用 2 楼 的回复:]

能不能讲详细一点呢?不好意思,我还是菜鸟,你说的那个m_pushButton从哪里定义出来的。。能简单举个例子吗?谢谢
[/Quote]
cgq865752626 2012-07-31
  • 打赏
  • 举报
回复
能不能讲详细一点呢?不好意思,我还是菜鸟,你说的那个m_pushButton从哪里定义出来的。。能简单举个例子吗?谢谢
xiebin133 2012-07-31
  • 打赏
  • 举报
回复
mousePressEvent()里面,判断if(m_pushButton->hasFocus()),然后在里面进行事件处理。

16,216

社区成员

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

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