QT QPushButton

GANZHIABC 2011-08-10 11:36:12
各位大侠 求指教!!!!!!!!!!!!!!!!!!! 谢谢谢谢!

各位大侠: 现在我用信号和槽机制实现了 单击一个按钮后让另外一个按钮隐藏

现在我想改为 双击 一个按钮后让另外一个按钮隐藏

这个怎么实现呀?一个QPushButton 好像没有 doubleclicked()这样的信号吧..........



各位大侠赐教!!!!!!

...全文
572 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lefttime 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ganzhiabc 的回复:]

引用 14 楼 lefttime 的回复:
如果代码确实和贴出来的一样的话,能确定安装过程和处理过程没问题~```

代码中的this是什么类?


我在 return QObject::eventFilter(obj, event); 之前加了一句:
qDebug()<<"lijing lijing lijing";

结果程序执行到这儿是无限循环打印 lijing li……
[/Quote]
汗, 这是不可取的, 事件过滤是将过滤对象的所有事件都抓取,重绘、输入、显示....可以参考下QEvent, 看看有多少event就知道了;未加判断就直接qDebug, 自然是无限输出....
GANZHIABC 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lefttime 的回复:]
如果代码确实和贴出来的一样的话,能确定安装过程和处理过程没问题~```

代码中的this是什么类?
[/Quote]

我在 return QObject::eventFilter(obj, event); 之前加了一句:
qDebug()<<"lijing lijing lijing";

结果程序执行到这儿是无限循环打印 lijing lijing lijing ; 然后一会儿就退出了......

GANZHIABC 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 qter_wd007 的回复:]
设置断点调试一下,看看什么问题。
[/Quote]

恩 谢啦谢啦!我是个初学QT的菜鸟 你要不说断点调试一下我还不知道可以断点调试呢。。。。。
非常感谢!
GANZHIABC 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lefttime 的回复:]
引用 9 楼 ganzhiabc 的回复:

引用 8 楼 lefttime 的回复:
可以,安装的事件过滤时只要设置承载事件过滤的对象不一样即可~```


没明白什么意思...

比如 我现在有两个button: button1 button2

button1->installEventFilter(this);
button2->installEventFilter(……
[/Quote]


找到问题的所在了, 昨天我是一下子给好多按钮都安装了事件过滤器,但是在
bool XXX::EventFilter(QObject *obj, QEvent *ev)这个函数中只判断了 obj 是否等于某几个按钮,
另外的几个没有判断 所以程序异常退出了.....
念茜 2011-08-10
  • 打赏
  • 举报
回复
我还是觉得重载virtual void mouseDoubleClickEvent(QMouseEvent* event) 比较容易
lefttime 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ganzhiabc 的回复:]

引用 2 楼 lefttime 的回复:
1. 重新继承QPushButton类, 处理virtual void mouseDoubleClickEvent(QMouseEvent* event);方法
2. 安装事件过滤器;

推荐第二种方法~`` :)


安装事件过滤器这个我不太明白 能稍微详细说一下思路么?谢谢啦!非常感谢!
[/Quote]

以下代码有个假设前提,注意一下即可:

QPushButton* pushButton = new QPushButton(customGui);
......
pushButton->installEventFilter(customGui);
......

// 这个过滤事件放在parent中
bool customGui::eventFilter(QObject* obj, QEvent* event)
{
if(obj == ui.okBtn)
{
if(event->type() == QEvent::MouseButtonDblClick)
{
// 在这里处理想要的动作
}
}

return QObject::eventFilter(obj, event);
}
GANZHIABC 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lefttime 的回复:]
1. 重新继承QPushButton类, 处理virtual void mouseDoubleClickEvent(QMouseEvent* event);方法
2. 安装事件过滤器;

推荐第二种方法~`` :)
[/Quote]

安装事件过滤器这个我不太明白 能稍微详细说一下思路么?谢谢啦!非常感谢!
GANZHIABC 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhh_steven 的回复:]
可以自己重写mousePressEvent或mouseReleaseEvent方法,在里面判断: 若用户在某个时间段内连续两次点击按钮, 则表示是用户双击了按钮,然后发送自己定义的信号,即可
[/Quote]

呃 我要怎么判断连续两次点击按钮呢?
lefttime 2011-08-10
  • 打赏
  • 举报
回复
1. 重新继承QPushButton类, 处理virtual void mouseDoubleClickEvent(QMouseEvent* event);方法
2. 安装事件过滤器;

推荐第二种方法~`` :)
zhh_kv 2011-08-10
  • 打赏
  • 举报
回复
可以自己重写mousePressEvent或mouseReleaseEvent方法,在里面判断: 若用户在某个时间段内连续两次点击按钮, 则表示是用户双击了按钮,然后发送自己定义的信号,即可
qter_wd007 2011-08-10
  • 打赏
  • 举报
回复
设置断点调试一下,看看什么问题。
lefttime 2011-08-10
  • 打赏
  • 举报
回复
如果代码确实和贴出来的一样的话,能确定安装过程和处理过程没问题~```

代码中的this是什么类?
GANZHIABC 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lefttime 的回复:]
可以,安装的事件过滤时只要设置承载事件过滤的对象不一样即可~```
[/Quote]

嗯嗯嗯 写错了 但是程序中就是ev->type() .....

不知道什么原因 总是异常退出 而且总是exited with code -1073741819

............................
lefttime 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ganzhiabc 的回复:]

引用 10 楼 lefttime 的回复:
引用 9 楼 ganzhiabc 的回复:

引用 8 楼 lefttime 的回复:
可以,安装的事件过滤时只要设置承载事件过滤的对象不一样即可~```


没明白什么意思...

比如 我现在有两个button: button1 button2

button1->installEventFilter(this);
butt……
[/Quote]
写法没错, 不过貌似有个小问题, ev->type()
GANZHIABC 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lefttime 的回复:]
引用 9 楼 ganzhiabc 的回复:

引用 8 楼 lefttime 的回复:
可以,安装的事件过滤时只要设置承载事件过滤的对象不一样即可~```


没明白什么意思...

比如 我现在有两个button: button1 button2

button1->installEventFilter(this);
button2->installEventFilter(……
[/Quote]


我这样写的:

bool XXX::eventFileter(QObject *obj,QEvent *ev)
{
if(obj == XXX){
if(ev.type() == MouseButtonDblClick){
.............
}
}else if(obj == XXXXX){
if(ev.type() == MouseButtonDblClick){
.............
}
}
}

事件过滤器不允许这么写嘛?
lefttime 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ganzhiabc 的回复:]

引用 8 楼 lefttime 的回复:
可以,安装的事件过滤时只要设置承载事件过滤的对象不一样即可~```


没明白什么意思...

比如 我现在有两个button: button1 button2

button1->installEventFilter(this);
button2->installEventFilter(this);

我这样写 程序总是异常退出.……
[/Quote]

代码没有问题~``` 问题应该出现在this中的eventFilter(...)中!
GANZHIABC 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lefttime 的回复:]
可以,安装的事件过滤时只要设置承载事件过滤的对象不一样即可~```
[/Quote]

没明白什么意思...

比如 我现在有两个button: button1 button2

button1->installEventFilter(this);
button2->installEventFilter(this);

我这样写 程序总是异常退出.......

lefttime 2011-08-10
  • 打赏
  • 举报
回复
可以,安装的事件过滤时只要设置承载事件过滤的对象不一样即可~```
GANZHIABC 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lefttime 的回复:]
引用 4 楼 ganzhiabc 的回复:

引用 2 楼 lefttime 的回复:
1. 重新继承QPushButton类, 处理virtual void mouseDoubleClickEvent(QMouseEvent* event);方法
2. 安装事件过滤器;

推荐第二种方法~`` :)


安装事件过滤器这个我不太明白 能稍微详细说一下思路么?谢谢啦!非常感谢!
……
[/Quote]



我可不可以给两个不同的按钮分别安装一个事件过滤器呀?

16,817

社区成员

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

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