66 lines
2.1 KiB
C++
66 lines
2.1 KiB
C++
#include "CTrendTreeView.h"
|
|
#include "CTrendTreeModel.h"
|
|
#include <QMenu>
|
|
#include <QMouseEvent>
|
|
#include <QContextMenuEvent>
|
|
|
|
CTrendTreeView::CTrendTreeView(QWidget *parent)
|
|
: QTreeView(parent)
|
|
{
|
|
|
|
}
|
|
|
|
void CTrendTreeView::contextMenuEvent(QContextMenuEvent *event)
|
|
{
|
|
CTrendTreeModel * pModel = dynamic_cast<CTrendTreeModel *>(model());
|
|
if(Q_NULLPTR != pModel)
|
|
{
|
|
QTreeWidgetItem * pItem = static_cast<QTreeWidgetItem*>(indexAt(event->pos()).internalPointer());
|
|
if(Q_NULLPTR != pItem)
|
|
{
|
|
if(DEV_TYPE == pItem->type())
|
|
{
|
|
QMenu menu;
|
|
menu.addAction(tr("全选"), [=](){ pModel->setChildrenCheckState(indexAt(event->pos()), Qt::Checked); });
|
|
menu.addAction(tr("清空"), [=](){ pModel->setChildrenCheckState(indexAt(event->pos()), Qt::Unchecked); });
|
|
menu.exec(event->globalPos());
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
void CTrendTreeView::mouseDoubleClickEvent(QMouseEvent *event)
|
|
{
|
|
CTrendTreeModel * pModel = dynamic_cast<CTrendTreeModel *>(model());
|
|
if(Q_NULLPTR != pModel)
|
|
{
|
|
QModelIndex index = indexAt(event->pos());
|
|
QTreeWidgetItem * pItem = static_cast<QTreeWidgetItem*>(index.internalPointer());
|
|
if(Q_NULLPTR != pItem)
|
|
{
|
|
if(TAG_TYPE == pItem->type())
|
|
{
|
|
Qt::CheckState state = pItem->data(0, Qt::CheckStateRole).value<Qt::CheckState>();
|
|
if (Qt::Checked == state)
|
|
{
|
|
state = Qt::Unchecked;
|
|
}
|
|
else
|
|
{
|
|
state = Qt::Checked;
|
|
}
|
|
pModel->setData(index, state, Qt::CheckStateRole);
|
|
update();
|
|
}
|
|
else if(DEV_GROUP_TYPE == pItem->type())
|
|
{
|
|
int row=pModel->parent(index).row();
|
|
pModel->loadTagInfoByDevGroup(pItem->data(0,ItemTagRole).toString());
|
|
expand(pModel->index(row,0));
|
|
}
|
|
}
|
|
}
|
|
return QTreeView::mouseDoubleClickEvent(event);
|
|
}
|