QT 一个widget设置多个tooltips

来源:互联网 发布:优化媒体和代理媒体 编辑:程序博客网 时间:2024/06/05 21:23

学习自《Foundations of Qt Development》



效果图

针对一个widget设置多个不同的tooltips,当鼠标移动到不同的区域能得到不同的提示。
自定义tooltip事件: 因为没有现成的tooltipEvent,所以需要自己来处理鼠标在不同位置的情况,使用QWidget::event()
调用QWidget::paintEvent()来绘画四个矩形。
细节如下:

tipzone.h

#ifndef TIPZONE_H#define TIPZONE_H#include <QWidget>#include <QPainter>#include <QRect>#include <QEvent>class tipZone : public QWidget{    Q_OBJECT    QRect redRec, blueRec, blackRec, whiteRec;    int width, height;public:    explicit tipZone(QWidget *parent = 0);signals:public slots:protected:    bool event(QEvent * e);    void paintEvent(QPaintEvent * event);};#endif // TIPZONE_H

tipzone.cpp

#include "tipzone.h"#include <QHelpEvent>tipZone::tipZone(QWidget *parent) :    QWidget(parent){    QRect geo = this->geometry();    width = geo.width();            // don't use this->width    height = geo.height();          // don't use this->height    redRec = QRect(0,0,width/2,height/2);    blueRec = QRect(width/2,0,width/2,height/2);    blackRec = QRect(0,height/2,width/2,height/2);    whiteRec = QRect(width/2,height/2,width/2,height/2);}bool tipZone::event(QEvent *e){    if(e->type() == QEvent::ToolTip){        QHelpEvent *helpEvent = static_cast<QHelpEvent *>(e);        if(redRec.contains(helpEvent->pos()))            setToolTip(QObject::tr("red"));        else if(blueRec.contains(helpEvent->pos()))            setToolTip(QObject::tr("blue"));        else if(blackRec.contains(helpEvent->pos()))            setToolTip(QObject::tr("black"));        else if(whiteRec.contains(helpEvent->pos()))            setToolTip(QObject::tr("white"));    }    return QWidget::event(e);}void tipZone::paintEvent(QPaintEvent *event){    QPainter *painter = new QPainter(this);    painter->fillRect(redRec,Qt::red);    painter->fillRect(blueRec,Qt::blue);    painter->fillRect(blackRec,Qt::black);    painter->fillRect(whiteRec,Qt::white);}
原创粉丝点击