我有一个 QMainWindow,并且想要处理来自其中的较小小部件(例如 tableview)的“点击”信号。
最初我将信号连接到这个 QMainWindow 的一个插槽,这是最常见的方法。现在我需要知道单击了哪个鼠标按钮,并为左右按钮做不同的事情,我发现“clicked”信号没有鼠标事件信息。
我尝试实现“mousePressEvent”功能,但仍然存在一些问题。如果鼠标动作作用于较小的小部件,则 MainWindow 不会进入其 mousePressEvent。
一些文件说我们可以通过 QQApplication::mousebuttons() 告诉按钮
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){.....}