qt获取双击事件

xotaoin831022 2011-12-28 10:46:13

我现在想要获取当前对话框的双击事件,我做了以下三件事情,,但是不知道为什么就是捕获不到这个双击事件。是不是我这种做法错了,请熟悉的人指教一下。
1:private slots:
void doubleevent();定义了槽函数
2:构造函数中实现 connect(this, SIGNAL(doubleClicked),this,SLOT(doubleevent()));
3:void output::doubleevent()
{
QMessageBox::information(this,tr("hello"),tr("Mars"));
}实现部分
...全文
1085 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
noodle123 2011-12-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhh_steven 的回复:]
方法: 可以直接覆盖/重载
void QWidget::mouseDoubleClickEvent ( QMouseEvent * event ) [virtual protected]
在此方法中添加所需代码,或在此方法中emit信号;
[/Quote]支持一下!
我是学友 2011-12-28
  • 打赏
  • 举报
回复
总分解一下就是:
connect(timer,SIGNAL(timeout()),this,SLOT(mouseClicked()));
//***单击事件启动定时器
void Mylabel::mousePressEvent(QMouseEvent *)
{
timer->start(50);
}
//***定义的单击事件槽函数,定时器超时,关闭定时器执行单击事件
void Mylabel::mouseClicked()
{
timer->stop();
emit sendLabelNum(labelNum);
}

//***定时内双击,执行双击事件
void Mylabel::mouseDoubleClickEvent(QMouseEvent *)
{
timer->stop();
emit sendMemoShow(labelNum);
}
这样写就差不多了
我是学友 2011-12-28
  • 打赏
  • 举报
回复
说错了,是定时器定时内如果鼠标双击执行双击事件,如果超时了只点击了一次就执行单击事件,这样可以区分单双击,因为双击之前必有单击,所以还是要区分一下
我是学友 2011-12-28
  • 打赏
  • 举报
回复
说错了,是定时器定时内如果鼠标双击执行双击事件,如果超时了只点击了一次就执行单击事件,这样可以区分单双击,因为双击之前必有单击,所以还是要区分一下
zhh_kv 2011-12-28
  • 打赏
  • 举报
回复

方法: 可以直接覆盖/重载
void QWidget::mouseDoubleClickEvent ( QMouseEvent * event ) [virtual protected]
在此方法中添加所需代码,或在此方法中emit信号;
我是学友 2011-12-28
  • 打赏
  • 举报
回复
说错了,是在定时器定时内如果鼠标点击俩次执行双击事件,如果超时了点击一次就执行单击事件,这样就可以区分单双击了
zhh_kv 2011-12-28
  • 打赏
  • 举报
回复

方法: 可以直接覆盖/重载
void QWidget::mouseDoubleClickEvent ( QMouseEvent * event ) [virtual protected]
在此方法中添加所需代码,或在此方法中emit信号;
我是学友 2011-12-28
  • 打赏
  • 举报
回复
可以这样试试,先开个定时器,定时器定时短一些,单击事件启动定时器,如果定时器没超时执行单击事件,如果定时器超时就执行双击事件,我的代码如下:
Mylabel::Mylabel(int num)
{
labelNum = num;
setFixedSize(63,50);
timer =new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(mouseClicked()));
}

//***
void Mylabel::mouseClicked()
{
//根据当前label的样式来决定发什么信号
QString style = this->styleSheet();
if(EMPTY_LABELS_HEAD == style)
{
timer->stop();
emit lastMonth();
}
else if(EMPTY_LABELS_END == style)
{
timer->stop();
emit nextMonth();
}
else
{
timer->stop();
emit sendLabelNum(labelNum);
}
}

//***
void Mylabel::mousePressEvent(QMouseEvent *)
{
timer->start(50);
}

//***
void Mylabel::mouseDoubleClickEvent(QMouseEvent *)
{
QString style = this->styleSheet();
//防止空白格子误操作
if((EMPTY_LABELS_HEAD == style) || (EMPTY_LABELS_END == style))
{
timer->stop();
}
else
{
timer->stop();
emit sendMemoShow(labelNum);
}
}

一般好像是双击事件之前肯定有单击事件,所以要区分一下,供参考
念茜 2011-12-28
  • 打赏
  • 举报
回复

void QWidget::mouseDoubleClickEvent ( QMouseEvent * event )
{
//do something
emit yourSignal();
}
法尔我给他 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhh_steven 的回复:]
方法: 可以直接覆盖/重载
void QWidget::mouseDoubleClickEvent ( QMouseEvent * event ) [virtual protected]
在此方法中添加所需代码,或在此方法中emit信号;
[/Quote]
这个应该是最理想的吧

16,215

社区成员

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

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