QTreeWidget中如何触发判断鼠标左键的点击事件!

bazzi2011 2014-06-12 06:24:38
简单的说就是类似于MFC中的LButtonDown。
我想判断做以下判断,
if(点击到根项)
{do something}
if(点击到空白区域)
{do something}

现在我无法获取到鼠标点击的区域,customContextMenuRequested(const QPoint &pos)这个可以获取点击点,但是却是右键的点击,我不需要右键!

我在网上查到需要继承类中去重写鼠标事件。那么又有两个问题,
1.是怎样创建继承类?“提升为”中选择基类后并没有创建什么新类啊?难道要手动添加一个?
2.在继承类中重写哪个事件???
...全文
1959 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iCanDoITOne 2016-01-22
  • 打赏
  • 举报
回复
重写contextMenuEvent()
qq_16792147 2014-10-13
  • 打赏
  • 举报
回复
这没有qApp怎么办?
maliang351 2014-06-16
  • 打赏
  • 举报
回复
引用 6 楼 bazzi2011 的回复:
[quote=引用 5 楼 maliang351 的回复:] [quote=引用 4 楼 bazzi2011 的回复:] [quote=引用 2 楼 maliang351 的回复:] 这个我知道,刚刚实现了这个功能。对treeWidget关联信号 itemPressed,然后在槽函数内部就可以判断左右键了。
 connect(ui->treeWidget, SIGNAL(itemPressed(QTreeWidgetItem*,int)), this, SLOT(slotItemPressed(QTreeWidgetItem*,int)))
void WChatWidget::slotItemPressed(QTreeWidgetItem *item, int column)
{
    // 注意关联的是itempressed,经测试:itemclicled不行,不能区分左右键。不知道为什么!。。
    if (item->parent() == NULL)     // 根节点
    {
        if (qApp->mouseButtons() == Qt::RightButton)
        {
            QMenu menu(ui->treeWidget);
            menu.addAction(m_pItemAction[DeleteRoot]);
            menu.exec(QCursor::pos());
        }
    }
    else
    {
        if (qApp->mouseButtons() == Qt::RightButton)
        {
            QMenu menu(ui->treeWidget);
            menu.addAction(m_pItemAction[DeleteChild]);
            menu.exec(QCursor::pos());
        }
    }
}
你这个判断条件不行,没有父节点充其量只能证明鼠标没有点击到根项上,但点击到子项上就会执行你的那句else了。现在我要的就是一个条件,如何得知鼠标没有点击到树的所有节点上?也就是树没有焦点。貌似QtreewidghtItem中也没有获取焦点的函数。[/quote] 晕,在itemPress这个信号里可以区分左右键,你问的不是区分左右键吗?!判断是否是根节点还是子节点是另外一个事了,你把外层的if-else去掉就行了啊。[/quote] 谢谢,我懂了,这个信号槽无非是判断树项的,假设我没有点击树的一个项,它是无法获取到的! 我现在已经得到了如何去判断父项还是子项,但我要的是点击空白区域的鼠标响应,显然 这个不行。[/quote] 空白地区的话,只能响应右击事件,而且是用另一个函数,好像是contex...event,具体忘了。
bazzi2011 2014-06-16
  • 打赏
  • 举报
回复
引用 5 楼 maliang351 的回复:
[quote=引用 4 楼 bazzi2011 的回复:] [quote=引用 2 楼 maliang351 的回复:] 这个我知道,刚刚实现了这个功能。对treeWidget关联信号 itemPressed,然后在槽函数内部就可以判断左右键了。
 connect(ui->treeWidget, SIGNAL(itemPressed(QTreeWidgetItem*,int)), this, SLOT(slotItemPressed(QTreeWidgetItem*,int)))
void WChatWidget::slotItemPressed(QTreeWidgetItem *item, int column)
{
    // 注意关联的是itempressed,经测试:itemclicled不行,不能区分左右键。不知道为什么!。。
    if (item->parent() == NULL)     // 根节点
    {
        if (qApp->mouseButtons() == Qt::RightButton)
        {
            QMenu menu(ui->treeWidget);
            menu.addAction(m_pItemAction[DeleteRoot]);
            menu.exec(QCursor::pos());
        }
    }
    else
    {
        if (qApp->mouseButtons() == Qt::RightButton)
        {
            QMenu menu(ui->treeWidget);
            menu.addAction(m_pItemAction[DeleteChild]);
            menu.exec(QCursor::pos());
        }
    }
}
你这个判断条件不行,没有父节点充其量只能证明鼠标没有点击到根项上,但点击到子项上就会执行你的那句else了。现在我要的就是一个条件,如何得知鼠标没有点击到树的所有节点上?也就是树没有焦点。貌似QtreewidghtItem中也没有获取焦点的函数。[/quote] 晕,在itemPress这个信号里可以区分左右键,你问的不是区分左右键吗?!判断是否是根节点还是子节点是另外一个事了,你把外层的if-else去掉就行了啊。[/quote] 谢谢,我懂了,这个信号槽无非是判断树项的,假设我没有点击树的一个项,它是无法获取到的! 我现在已经得到了如何去判断父项还是子项,但我要的是点击空白区域的鼠标响应,显然 这个不行。
maliang351 2014-06-14
  • 打赏
  • 举报
回复
引用 4 楼 bazzi2011 的回复:
[quote=引用 2 楼 maliang351 的回复:] 这个我知道,刚刚实现了这个功能。对treeWidget关联信号 itemPressed,然后在槽函数内部就可以判断左右键了。
 connect(ui->treeWidget, SIGNAL(itemPressed(QTreeWidgetItem*,int)), this, SLOT(slotItemPressed(QTreeWidgetItem*,int)))
void WChatWidget::slotItemPressed(QTreeWidgetItem *item, int column)
{
    // 注意关联的是itempressed,经测试:itemclicled不行,不能区分左右键。不知道为什么!。。
    if (item->parent() == NULL)     // 根节点
    {
        if (qApp->mouseButtons() == Qt::RightButton)
        {
            QMenu menu(ui->treeWidget);
            menu.addAction(m_pItemAction[DeleteRoot]);
            menu.exec(QCursor::pos());
        }
    }
    else
    {
        if (qApp->mouseButtons() == Qt::RightButton)
        {
            QMenu menu(ui->treeWidget);
            menu.addAction(m_pItemAction[DeleteChild]);
            menu.exec(QCursor::pos());
        }
    }
}
你这个判断条件不行,没有父节点充其量只能证明鼠标没有点击到根项上,但点击到子项上就会执行你的那句else了。现在我要的就是一个条件,如何得知鼠标没有点击到树的所有节点上?也就是树没有焦点。貌似QtreewidghtItem中也没有获取焦点的函数。[/quote] 晕,在itemPress这个信号里可以区分左右键,你问的不是区分左右键吗?!判断是否是根节点还是子节点是另外一个事了,你把外层的if-else去掉就行了啊。
bazzi2011 2014-06-13
  • 打赏
  • 举报
回复
引用 2 楼 maliang351 的回复:
这个我知道,刚刚实现了这个功能。对treeWidget关联信号 itemPressed,然后在槽函数内部就可以判断左右键了。
 connect(ui->treeWidget, SIGNAL(itemPressed(QTreeWidgetItem*,int)), this, SLOT(slotItemPressed(QTreeWidgetItem*,int)))
void WChatWidget::slotItemPressed(QTreeWidgetItem *item, int column)
{
    // 注意关联的是itempressed,经测试:itemclicled不行,不能区分左右键。不知道为什么!。。
    if (item->parent() == NULL)     // 根节点
    {
        if (qApp->mouseButtons() == Qt::RightButton)
        {
            QMenu menu(ui->treeWidget);
            menu.addAction(m_pItemAction[DeleteRoot]);
            menu.exec(QCursor::pos());
        }
    }
    else
    {
        if (qApp->mouseButtons() == Qt::RightButton)
        {
            QMenu menu(ui->treeWidget);
            menu.addAction(m_pItemAction[DeleteChild]);
            menu.exec(QCursor::pos());
        }
    }
}
你这个判断条件不行,没有父节点充其量只能证明鼠标没有点击到根项上,但点击到子项上就会执行你的那句else了。现在我要的就是一个条件,如何得知鼠标没有点击到树的所有节点上?也就是树没有焦点。貌似QtreewidghtItem中也没有获取焦点的函数。
bazzi2011 2014-06-13
  • 打赏
  • 举报
回复
楼上两位,我不是要左键判断,我想要的是左键点击后,判断点击的区域是树节点,还是空白区域!
maliang351 2014-06-12
  • 打赏
  • 举报
回复
这个我知道,刚刚实现了这个功能。对treeWidget关联信号 itemPressed,然后在槽函数内部就可以判断左右键了。
 connect(ui->treeWidget, SIGNAL(itemPressed(QTreeWidgetItem*,int)), this, SLOT(slotItemPressed(QTreeWidgetItem*,int)))
void WChatWidget::slotItemPressed(QTreeWidgetItem *item, int column)
{
    // 注意关联的是itempressed,经测试:itemclicled不行,不能区分左右键。不知道为什么!。。
    if (item->parent() == NULL)     // 根节点
    {
        if (qApp->mouseButtons() == Qt::RightButton)
        {
            QMenu menu(ui->treeWidget);
            menu.addAction(m_pItemAction[DeleteRoot]);
            menu.exec(QCursor::pos());
        }
    }
    else
    {
        if (qApp->mouseButtons() == Qt::RightButton)
        {
            QMenu menu(ui->treeWidget);
            menu.addAction(m_pItemAction[DeleteChild]);
            menu.exec(QCursor::pos());
        }
    }
}
  • 打赏
  • 举报
回复
mouseEvent->type()可以用来判断是否是鼠标左键触发 Qt::LeftButton

16,817

社区成员

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

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