之前有写过Tool tips的相关文章QT help button 和 setWhatsThis
不过那只是局限于QAction,而且还需要一个help button。
本文的例子是鼠标放到Widget(groupBox)后即生成相应的文字提示。



效果图



ui文件

核心代码:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->groupBox->setTitle( "this is a long test text" );
    ui->label->setPixmap( QPixmap("screen.png") );
    ui->label->setScaledContents( true );    //picture resize in father widget.

    ui->centralWidget->setMouseTracking( true );    //Make mouseMoveEvent works.
    ui->groupBox->setMouseTracking( true );
    ui->label->setMouseTracking( true );
    setMouseTracking( true );
}

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    if( isInGeometry() )
    {
        qDebug() << "isInGeometry " << ui->groupBox->pos() << " " << ui->groupBox->title();
        QPoint pos = ui->groupBox->mapToGlobal( ui->groupBox->pos() );    // convert to screen coordinate
        QToolTip::showText( pos, ui->groupBox->title() );
    }
}

bool MainWindow::isInGeometry()
{
    QRect rect = ui->groupBox->geometry();
    QPoint pos = QCursor::pos(); // screen coordinate
    QPoint widgetPos = mapFromGlobal( pos );
    qDebug() << widgetPos;
    if( widgetPos.x() > rect.x() && widgetPos.x() < rect.x() + rect.width() &&
        widgetPos.y() > rect.y() && widgetPos.y() < rect.y() + rect.height() )
    {
        return true;
    }
    return false;
}

分类: C plus plus

发表评论

电子邮件地址不会被公开。 必填项已用*标注