当前位置: 代码迷 >> QT开发 >> QTreeWidget中怎么触发判断鼠标左键的点击事件
  详细解决方案

QTreeWidget中怎么触发判断鼠标左键的点击事件

热度:233   发布时间:2016-04-25 03:19:34.0
QTreeWidget中如何触发判断鼠标左键的点击事件!
简单的说就是类似于MFC中的LButtonDown。
我想判断做以下判断,
if(点击到根项)
{do something}
if(点击到空白区域)
{do something}

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

我在网上查到需要继承类中去重写鼠标事件。那么又有两个问题,
1.是怎样创建继承类?“提升为”中选择基类后并没有创建什么新类啊?难道要手动添加一个? 
2.在继承类中重写哪个事件???
------解决方案--------------------
mouseEvent->type()可以用来判断是否是鼠标左键触发 Qt::LeftButton
------解决方案--------------------
这个我知道,刚刚实现了这个功能。对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());
        }
    }
}

------解决方案--------------------
引用:
Quote: 引用:

这个我知道,刚刚实现了这个功能。对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中也没有获取焦点的函数。

晕,在itemPress这个信号里可以区分左右键,你问的不是区分左右键吗?!判断是否是根节点还是子节点是另外一个事了,你把外层的if-else去掉就行了啊。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

这个我知道,刚刚实现了这个功能。对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());