我有一个 QMainWindow,并且想要处理来自其中较小的小部件(例如 tableview)的“单击”信号。
最初我将信号连接到这个 QMainWindow 的插槽,这是最常见的方法。
现在我需要判断单击了哪个鼠标按钮,并对左右按钮执行不同的操作,我发现“单击”信号没有鼠标事件信息。
我尝试实现“mousePressEvent”功能,但仍然存在一些问题。如果鼠标操作作用在较小的小部件上,则 MainWindow 将不会进入其 mousePressEvent。
有文档说我们可以通过 QQApplication::mousebuttons() 来判断按钮
http://bugreports.qt-project.org/browse/QTBUG-1067 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->mouseButtons() 总是返回 0,如何通过 QApplication::mouseButtons 获取单击的鼠标按钮?
在我的代码中,插槽如下所示:
void clickItem( const QModelIndex & idx){.....}