#1 QObject를 상속 받은 tooltip을 처리할 class를 선언한다


at ZenoToolTipHelper.h

class ZenoToolTipHelper : public QObject

{

Q_OBJECT

public:

explicit ZenoToolTipHelper(QObject* parent = NULL)

: QObject(parent)

{

}


protected:

bool eventFilter(QObject* obj, QEvent* event);

};


at ZenoToolTipHelper.cpp

#include <QAbstractItemView>

#include <QToolTip>

#include <QEvent>

#include <QHelpEvent>

bool ZenoToolTipHelper::eventFilter(QObject* obj, QEvent* event)

{

if (event->type() == QEvent::ToolTip)

{

QAbstractItemView* view = qobject_cast<QAbstractItemView*>(obj->parent());

if (view == nullptr)

{

return false;

}


QHelpEvent* helpEvent = static_cast<QHelpEvent*>(event);

QPoint pos = helpEvent->pos();

QModelIndex index = view->indexAt(pos);

if (index.isValid() == false)

return false;

//row , column을 적절하게 판단하여서 tooltip을 보여준다.

QFontMetrics fm(view->font());

QRect rect = view->visualRect(index);

int rectWidth = rect.width();


QToolTip::showText(helpEvent->globalPos(),               "tooltip 내용들", view, rect);

return true;


}

return false;

}


#2 #1에서 만들 class를 tableView에 set한다.

tableView->viewport()->installEventFilter(new ZenoToolTipHelper());

by 무위자연 2018. 7. 11. 15:06