[Qt-interest] Fwd: how to judge which button click the QTreeWidgetItem?

jani at wbsources.com jani at wbsources.com
Fri Nov 5 12:34:37 CET 2010


I would derive a new class cMyTreeWidget from QTreeWidget and implement
mousePressEvent method to catch which button is pressed.
If I press Qt::LeftButton then I would get itemAt(event->pos()) and play
with it.

Short example:

#ifndef CMYTREEWIDGET_H
#define CMYTREEWIDGET_H

#include <QTreeWidget>

class cMyTreeWidget : public QTreeWidget
{
public:
    cMyTreeWidget(QWidget *parent=0);
protected:
    void mousePressEvent(QMouseEvent *event);
};

#endif // CMYTREEWIDGET_H

---

#include "cmytreewidget.h"

#include <QDebug>
#include <QMouseEvent>
cMyTreeWidget::cMyTreeWidget(QWidget *parent) : QTreeWidget(parent)
{
}

void cMyTreeWidget::mousePressEvent(QMouseEvent *event)
{
    qDebug() << "mytreewidget custom mouse event";
    if(event->button() == Qt::LeftButton)
    {
        QTreeWidgetItem *item = itemAt(event->pos());
        if(item)
        {
            qDebug() << item->text(0);
        }
    }
}

---

You can promote QTreeWidget cMyTreeWidget to make it visible in designer.

WBR,
Jani.

> ---------- Forwarded message ----------
> From: lvbing lvbing <lvbing1981 at gmail.com>
> Date: Thu, Nov 4, 2010 at 7:01 PM
> Subject: Re: [Qt-interest] how to judge which button click the
> QTreeWidgetItem?
> To: Keith Rusler <xzekecomax at gmail.com>
>
>
> I know,
> but  when I click the right button,it will emit the signal:
> itemClick(QTreeWidgetItem*,int).
>
> so I don't know who emit the signal itemClick,left button or right
> button.and the result is:when I clicked
> the left button,the itemClick will be done
> and when I clicked the right button,the itemClick also will be done,but I
> don't want to call the itemClick when
> I clicked the right button!
>
> so how can I distinguish which button has been clicked when the signal
> itemClicked be emited?
>
> thank all
>
>
> On Thu, Nov 4, 2010 at 5:46 PM, Keith Rusler <xzekecomax at gmail.com> wrote:
>
>> I think it should be quite normal if you really think about it. Because
>> if
>> you right click on any item, it should show a context menu for that item
>> it
>> was clicked on right?
>>
>> On 4 November 2010 04:08, lvbing lvbing <lvbing1981 at gmail.com> wrote:
>>
>>> hello all
>>>     I have a QTreeWidget in my QMainWidows,and I have two functions,the
>>> one is left button click
>>>  and the another is the right button to popup some Menu.
>>>
>>> The code like this:
>>>
>>> MainWindow::MainWindow() : QMainWindow()
>>> {
>>>     setCentralWidget(view);
>>>     view = new QTreeWidget(this);
>>>     connect(view,SIGNAL(itemClicked ( QTreeWidgetItem *, int
>>> )),this,SLOT(on_MyTree_itemClicked( QTreeWidgetItem *, int )));
>>>     init();
>>> }
>>>
>>> void MainWindow::on_MyTree_itemClicked ( QTreeWidgetItem * item, int
>>> column )
>>> {
>>>     qDebug() << "on_MyTree_itemClicked"
>>>         << item->text(column);
>>>     //to do somthing
>>> }
>>>
>>>
>>> void MainWindow::contextMenuEvent(QContextMenuEvent * event)
>>> {
>>>     qDebug() << "contextMenuEvent"
>>>         << event->pos().x()
>>>         << " and "
>>>         << event->pos().y();
>>>     //To popup the menu when I click the right mouse button!
>>> }
>>>
>>> But now I find when I clicked the right button,it will call
>>> the on_MyTree_itemClicked  slot first!!
>>> and how can I distinguish the left or right button?
>>>
>>>  thanks all
>>>
>>> _______________________________________________
>>> Qt-interest mailing list
>>> Qt-interest at trolltech.com
>>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>>
>>>
>>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>





More information about the Qt-interest-old mailing list