QT学习Android应用,如何实现长按弹出右键菜单?

牧牛童子 2016-12-15 12:44:34
目前的鼠标右键菜单,实现了。
但在手机上,只能长按了,如何实现?谢谢。
...全文
1151 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
牧牛童子 2017-12-23
  • 打赏
  • 举报
回复
本想在触摸或press开始时取一个时间,到drop可touchEnd时,再取一个时间,时间差达到某个值时,视为长按。结果没成功! 哪位成功了,也请来指教一下。
牧牛童子 2017-12-23
  • 打赏
  • 举报
回复
引用 12 楼 qq_35970901 的回复:
怎么做到在界面上右键就弹出菜单啊?ontouch里面的操作能发出来看下么
不好意思,我根据楼上各位的指导意见,在plaintext上用事件过滤器尝试过mousepress,keypress ,touchevent.,dragenter/drop等,都没能成功拦截。 只好折衷,做了个双击事件来代替 长按 。
百叶天空 2017-03-28
  • 打赏
  • 举报
回复
怎么做到在界面上右键就弹出菜单啊?ontouch里面的操作能发出来看下么
牧牛童子 2017-01-07
  • 打赏
  • 举报
回复
引用 2 楼 u010111033 的回复:
在事件里面写,比如touchEvent,然后在Qmenu里面关联你的item
感謝詞大神的幫助! 我用timerEvent()事件 最終實現了長按的識別,謝謝你。 (但是用Timer 沒法觸發定時器,不知爲何……出於學習,我單獨發貼了……)
牧牛童子 2017-01-05
  • 打赏
  • 举报
回复
引用 5 楼 u010111033 的回复:
[quote=引用 1 楼 mini_peng 的回复:] 半個月過去了,這個貼子要沉下了……大神在哪裏呢?
我有三点建议: 1、如果采用QTouchEvent的话,我给你找了2篇帖子,你好好看看,QTouchEvent在Qt4就出现了,当时用在arm触摸屏与诺基亚电阻屏上的; http://blog.csdn.net/u010002704/article/details/40714175 http://www.genshuixue.com/i-cxy/p/12251462 2、采用QMousePressEvent方式,按下后延时500毫秒,再emit一个信号,此信号关联你要执行的方法。对于按下的部件,要么继承QT原部件重写pressevent事件,要么采用事件过滤器; 3、在安卓上可以正常使用下拉列表框,触摸后就显示出来了,所以建议你看下下拉列表框实现触摸或者点击这些操作的Qt源码。从而方便你自己完成功能; 以上三种,哪种方式你觉得方便,你采用哪种,真的说起来,其实都可以实现你的功能[/quote] 好的,谢谢!
Little柯南 2017-01-05
  • 打赏
  • 举报
回复
引用 1 楼 mini_peng 的回复:
半個月過去了,這個貼子要沉下了……大神在哪裏呢?
我有三点建议: 1、如果采用QTouchEvent的话,我给你找了2篇帖子,你好好看看,QTouchEvent在Qt4就出现了,当时用在arm触摸屏与诺基亚电阻屏上的; http://blog.csdn.net/u010002704/article/details/40714175 http://www.genshuixue.com/i-cxy/p/12251462 2、采用QMousePressEvent方式,按下后延时500毫秒,再emit一个信号,此信号关联你要执行的方法。对于按下的部件,要么继承QT原部件重写pressevent事件,要么采用事件过滤器; 3、在安卓上可以正常使用下拉列表框,触摸后就显示出来了,所以建议你看下下拉列表框实现触摸或者点击这些操作的Qt源码。从而方便你自己完成功能; 以上三种,哪种方式你觉得方便,你采用哪种,真的说起来,其实都可以实现你的功能
牧牛童子 2017-01-05
  • 打赏
  • 举报
回复
引用 9 楼 u010111033 的回复:
[quote=引用 1 楼 mini_peng 的回复:] 半個月過去了,這個貼子要沉下了……大神在哪裏呢?
为什么要加定时器了?类似线程等待,sleep这些你试过么?或者你获取当前时间,如果比当前的秒数多1就开始emit信号这些思想都可以。在这里你最好用中正平和一些,仅仅限于此事件此函数里面计时的算法 你甚至可以pressEvent()就发信号,mouseReleaseEvent()里面也发信号,判断两个过程时间差,时间差达到你的2秒,在激发你的执行函数[/quote] 我也想過通兩次過讀取系統時間差來判斷,這個已經做到了。只不過我認爲這種機制不好。比如在後面有個程序正好修改了系統時間,就會出現偏差。所以我學得還是用計時器穩妥一些。因此,我在折騰計時器,但不知爲何計時器就是不啓動。 見網上有人說 計時器定義 不能在事件晨,要在類定義裏寫,然後在事件裏start……但都沒能讓timer啓動……
Little柯南 2017-01-05
  • 打赏
  • 举报
回复
引用 1 楼 mini_peng 的回复:
半個月過去了,這個貼子要沉下了……大神在哪裏呢?
为什么要加定时器了?类似线程等待,sleep这些你试过么?或者你获取当前时间,如果比当前的秒数多1就开始emit信号这些思想都可以。在这里你最好用中正平和一些,仅仅限于此事件此函数里面计时的算法 你甚至可以pressEvent()就发信号,mouseReleaseEvent()里面也发信号,判断两个过程时间差,时间差达到你的2秒,在激发你的执行函数
牧牛童子 2017-01-05
  • 打赏
  • 举报
回复
引用 5 楼 u010111033 的回复:
2、采用QMousePressEvent方式,按下后延时500毫秒,再emit一个信号,此信号关联你要执行的方法。对于按下的部件,要么继承QT
我在mousePressEvent裏加入定時器(想在2秒後設置一個長按標志)。鼠標按下時。定時器似乎沒工作,何故? {//啓用定時器,來標記是否爲2秒鍾長按動作 QTimer *tmr01 = new QTimer(this); tmr01->connect(tmr01,SIGNAL(timeout()),this,SLOT(timer01_EveryPress_dosomething())); //connect(tmr01,SIGNAL(timeout()),this,SLOT(isEveryPress01 = true)); //开始运行定时器,定时时间间隔为2000ms tmr01->setInterval(1000); tmr01->start(); }
牧牛童子 2017-01-05
  • 打赏
  • 举报
回复
我在mousePressEvent裏加入定時器(想在2秒後設置一個長按標志)。鼠標按下時。定時器似乎沒工作,何故? {//啓用定時器,來標記是否爲2秒鍾長按動作 QTimer *tmr01 = new QTimer(this); tmr01->connect(tmr01,SIGNAL(timeout()),this,SLOT(timer01_EveryPress_dosomething())); //connect(tmr01,SIGNAL(timeout()),this,SLOT(isEveryPress01 = true)); //开始运行定时器,定时时间间隔为2000ms tmr01->setInterval(1000); tmr01->start(); }
牧牛童子 2017-01-04
  • 打赏
  • 举报
回复
引用 3 楼 u010111033 的回复:
另外一种方法,既然是按住,对吧?你按的是个控件,你可以让这个部件加入事件管理器,比如当这个部件被doubleclick事件发生,那么执行memu的显示,这个就与你说的长按类似了
謝謝! doubleClick這個很好實現。但似乎不符合安卓手機的 長按 右鍵 的效果。 touchEvent這個方法我沒做成功。嘗試 touchBegin touchEnd加Timer結合,設一個標記,定時2秒後設置一個標記,也沒做成。
Little柯南 2017-01-03
  • 打赏
  • 举报
回复
另外一种方法,既然是按住,对吧?你按的是个控件,你可以让这个部件加入事件管理器,比如当这个部件被doubleclick事件发生,那么执行memu的显示,这个就与你说的长按类似了
Little柯南 2017-01-03
  • 打赏
  • 举报
回复
在事件里面写,比如touchEvent,然后在Qmenu里面关联你的item
牧牛童子 2017-01-02
  • 打赏
  • 举报
回复
半個月過去了,這個貼子要沉下了……大神在哪裏呢?

16,817

社区成员

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

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