如何在单击插槽中使用QApplication::MouseButton()辨别鼠标按键? [英] How to tell the mouse button using QApplication::mouseButtons() in a "click" slot?

查看:20
本文介绍了如何在单击插槽中使用QApplication::MouseButton()辨别鼠标按键?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个QMainWindow,希望处理来自其中较小小部件(如Tableview)的"已单击"信号。

最初我将信号连接到此QMainWindow的一个插槽,这是最常见的方法。 现在我需要告诉鼠标被点击的是哪个按钮,并对左键和右键做不同的事情,我发现"CLICKED"信号没有鼠标事件信息。

我尝试实现了MousePressEvent函数,但仍然存在一些问题。如果鼠标操作作用于较小的小部件,则主窗口不会进入其MousePressEvent。

一些文档说我们可以通过QQApplication::MouseButton()

来辨别按钮

http://bugreports.qt-project.org/browse/QTBUG-1067

我还找到了一些示例代码。然而,这是用于"新闻事件",但我想获得鼠标按钮的"点击事件"。 以下是示例代码:

connect(moduleTree,SIGNAL(itemPressed(QTreeWidgetItem *, int)),this,SLOT(SlotItemClicked(QTreeWidgetItem *, int)));

void CGuiMainwindow::SlotItemClicked(QTreeWidgetItem *item, int column)

{
     if (qApp->mouseButtons() == Qt::LeftButton)
     { return; }

     if (qApp->mouseButtons() == Qt::RightButton)
     {
        ......
     }
}

当我尝试这样做时,两个if语句都不能满足,我不知道为什么。QApp->MouseButton()总是返回0,如何通过QApplication::MouseButton获取点击的鼠标按钮?

在我的代码中,插槽如下所示:

void clickItem( const QModelIndex & idx){.....}

推荐答案

您得到0,因为单击是在释放鼠标后发出的,而不是在按下鼠标时发出。你想实现什么目标?也许可以尝试对您的小部件上下文MenuPolicy进行设置以自定义,然后连接到信号ConextMenuRequsted(用于右击)并单击以用于左键单击?

这篇关于如何在单击插槽中使用QApplication::MouseButton()辨别鼠标按键?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆