Qt5製作滑鼠懸停顯示Hint的ToolTip
在日常生活中的使用的軟體中,我們經常會遇到這樣的情況。
我們在網頁上,有些網頁連結的文字(比如文章標題,知乎問題標題,百度的詞條等)因為太長了,而顯示不出來,但是滑鼠懸停在上面的時候就可以顯示出來。
我們在QQ上或者某些輸入框內,我們不知道應該輸入什麼內容,但是滑鼠如果懸停在輸入框內的時候,會產生一個友好資訊的hint。
實現方法,就是我們今天的ToolTip設定。
程式碼如下:
ItemWidget.h
#ifndef ITEMWIDGET_H
#define ITEMWIDGET_H
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
//class CLabel;
class ItemWidget : public QWidget
{
Q_OBJECT
public:
explicit ItemWidget(QWidget *parent = 0);
void setText(QPixmap pixmap, QString name, QString info);
void setText(QString info);
signals:
public slots:
private:
QLabel *labelIcon;
QLabel *labelName;
QLabel *labelInfo;
QHBoxLayout *horLayout;
QVBoxLayout *verlayout;
protected:
bool event(QEvent *e);
};
#endif // ITEMWIDGET_H
ItemWidget.cpp
#include "itemwidget.h"
#include "global.h"
#include "ctooltip.h"
#include <QEvent>
#include <QCursor>
ItemWidget::ItemWidget(QWidget *parent) :
QWidget(parent)
{
labelIcon = new QLabel(this);
labelName = new QLabel(this);
labelName->setStyleSheet("QLabel{color: green; font: 13pt bold;}");
labelInfo = new QLabel(this);
labelInfo->setStyleSheet("QLabel{color: gray;}");
verlayout = new QVBoxLayout();
verlayout->setContentsMargins(0, 0, 0, 0);
verlayout->addWidget(labelName);
verlayout->addWidget(labelInfo);
horLayout = new QHBoxLayout(this);
horLayout->setContentsMargins(2, 2, 2, 2);
horLayout->addWidget(labelIcon, 1, Qt::AlignTop);
horLayout->addLayout(verlayout, 4);
}
void ItemWidget::setText(QPixmap pixmap, QString name, QString info) {
labelIcon->setPixmap(pixmap);
labelName->setText(name);
labelInfo->setText(info);
}
// 測試用的
void ItemWidget::setText(QString info) {
labelIcon->setText(info);
}
// 滑鼠懸停的時候,顯示當前使用者簡要資訊
bool ItemWidget::event(QEvent *e) {
if (e->type() == QEvent::ToolTip) {
qDebug() << "tool tip show";
g_toolTip->showMessage(labelIcon->pixmap(),
labelName->text(),
labelInfo->text(),
QCursor::pos());
} else if (e->type() == QEvent::Leave) {
qDebug() << "tool tip leave";
g_toolTip->hide();
}
return QWidget::event(e);
}
然後是CToolTip自定義樣式部分:
CToolTip.h
#ifndef CTOOLTIP_H
#define CTOOLTIP_H
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QGroupBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
class CToolTip : public QWidget
{
Q_OBJECT
public:
explicit CToolTip(QWidget *parent = 0);
void showMessage(const QPixmap *pixmap, QString name, QString info, QPoint point);
void showMessage(const QPixmap *pixmap, QPoint point);
signals:
public slots:
private:
QLabel *labelIcon;
QLabel *labelName;
QLabel *labelInfo;
QHBoxLayout *horLayout;
QVBoxLayout *verlayout;
QGroupBox *groupBox;
protected:
void hoverEvent(QHoverEvent *);
};
#endif // CTOOLTIP_H
CToolTip.cpp
#include "ctooltip.h"
#include <QDebug>
#include <QApplication>
#include <QDesktopWidget>
CToolTip::CToolTip(QWidget *parent) :
QWidget(parent)
{
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
this->resize(200, 100); ;
this->setObjectName("CToolTip");
this->setStyleSheet("QWidget#CToolTip {border: 2px solid green; background-color: skyblue;}");
groupBox = new QGroupBox(this);
groupBox->setGeometry(10, 10, 180, 80);
groupBox->setTitle("使用者資訊");
labelIcon = new QLabel(groupBox);
labelName = new QLabel(groupBox);
labelInfo = new QLabel(groupBox);
verlayout = new QVBoxLayout();
verlayout->setContentsMargins(0, 0, 0, 0);
verlayout->addWidget(labelName);
verlayout->addWidget(labelInfo);
horLayout = new QHBoxLayout(groupBox);
horLayout->setContentsMargins(10, 10, 10, 10);
horLayout->addWidget(labelIcon, 1, Qt::AlignTop);
horLayout->addLayout(verlayout, 4);
}
// 顯示ToolTip訊息
void CToolTip::showMessage(const QPixmap *pixmap, QString name, QString info, QPoint point) {
labelIcon->setPixmap(*pixmap);
labelName->setText(name);
labelInfo->setText(info);
// 重新定義CToolTip的座標
int rectX;
int rectY;
if (point.rx() < 200) {
rectX = point.rx() + 10;
} else {
rectX = point.rx() - 240;
}
rectY = point.ry();
move(QPoint(rectX, rectY));
QWidget::show();
}
// 顯示ToolTip訊息
void CToolTip::showMessage(const QPixmap *pixmap, QPoint point) {
labelIcon->setPixmap(*pixmap);
labelName->setText("自己想辦法獲取");
labelInfo->setText("自己動手,豐衣足食");
// 此處可以作為QToolTip樣式進行顯示
move(point);
QWidget::show();
}
// 當滑鼠進入事件時,讓介面隱藏掉
void CToolTip::hoverEvent(QHoverEvent *) {
hide();
}
當然當然,在大多數的元件上面都有一個成員函式setToolTip(QSTring& ..)
這個就可以實現簡單的友好資訊提示功能了。
相關推薦
Qt5製作滑鼠懸停顯示Hint的ToolTip
在日常生活中的使用的軟體中,我們經常會遇到這樣的情況。 我們在網頁上,有些網頁連結的文字(比如文章標題,知乎問題標題,百度的詞條等)因為太長了,而顯示不出來,但是滑鼠懸停在上面的時候就可以顯示出來。 我們在QQ上或者某些輸入框內,我們不知道應該輸入什麼內容,
為何有的連結滑鼠懸停顯示小手有的沒有
<a href="#" style="cursor:default">aaa</a> default 預設游標(通常是一個箭頭) auto 預設。瀏覽器設定的游標。 crosshair 游標呈現為十字線。 pointer 游標呈現為指示連結的指標(一隻手) move 此游
echarts滑鼠懸停顯示、X、Y軸設定,dataZoom(X軸拖拽效果)
1. 滑鼠點選觸發ajax,獲取data資料 $("#echartsContent).off("click",function(){ var code=$("#codeInput").val(); var startTime=$("#startTime").
JavaScript實現圖片輪播和滑鼠懸停顯示
例: 提前放好了四張圖片,並編號。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www
JS特效:滑鼠懸停顯示提示
<script language="JavaScript"> function showtip2(current,e,text) { if (document.readyState=="complete") {<!--如果是ie瀏覽器並且滿足readyst
滑鼠懸停顯示CSS3動畫邊框
1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta charset="utf-8" /> 5 <title>CSS3滑
Python+Selenium 操作示例——滑鼠懸停顯示二級選單,再點選二級選單或下拉列表
# encoding=utf-8 from selenium import webdriver from selenium.webdriver.common.action_chains im
實現Bootstrap導航條可點選和滑鼠懸停顯示下拉選單
使用Bootstrap導航條元件時,如果你的導航條帶有下拉選單,那麼這個帶下拉選單的導航在點選時只會浮出下拉選單,它本身的href屬性會失效,也就是失去了超連結功能,這並不是我想要的,我希望導航條的連結可以正常開啟它的連結,但又需要下拉選單功能,開始折騰~ 首先解決帶下拉
bootstrap怎麼設定下拉選單不點選,改成滑鼠懸停直接顯示下拉選單
方法一: 實際上比較簡單,只需要加一個css設定下hover的狀態,把下拉選單設定成block,具體css:.nav > li:hover .dropdown-menu {display: block;} 但是主導航失去連結的效
onmouse實現滑鼠懸停內容顯示及隱藏
先上程式碼: <html> <head> <title>js操作</title> <style> .div_in{ width:330px; height:165px; }
JavaScript | 滑鼠懸停動態彈出浮動視窗顯示圖片 | clientX, clientY, scrollLeft, scrollTop
動態彈出浮動視窗顯示圖片的效果是這樣子的: 不多說,直接上程式碼: <!DOCTYPE html> <html lang="en"> <head> &
javascript如何製作簡單的圖片輪播,帶有數字選擇,滑鼠懸停暫停輪播,離開時繼續輪播圖片
直接上程式碼,程式碼有註釋: 要想做圖片輪播,需要知道以下知識點: 定時函式: window物件: window.setInterval("執行的方法名",間隔時間(毫秒)):返回值是一個用來
h5新標籤和css3動畫製作一個滑鼠懸停的動畫效果
<span style="font-size:18px;"><div class="grid wow zoomIn"> <figure class="effect-bubba"> <
C# 滑鼠懸停在datagridview的某單元格,顯示懸浮框效果
本文轉載:http://www.cnblogs.com/bribe/archive/2013/10/08/3357345.html 今天在做專案時,看到一軟體做的懸浮框效果不錯,從網上搜羅了一些資料,未見到有十分好的解決辦法,只能自已動手,利用datagridview 的ToolT
原生JS實現滑鼠懸停圖片顯示文字效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title>無標題文件</title> <style> *{ margin:0;
jQuery css3滑鼠懸停圖片顯示遮罩層動畫特效
<!doctype html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=
ArcGIS api for javascript——滑鼠懸停時顯示資訊視窗
描述 本例展示當用戶在要素上懸停滑鼠時如何顯示InfoWindow。本例中,要素是查詢USA州圖層的QueryTask的查詢結果。工作流程如下: 1.使用者單擊一個要素 2.要素是“加亮的”圖形。 3.使用者在圖形上懸停滑鼠,看到屬性資訊的資訊視窗。 如果想要在任意要素上懸停滑鼠來檢視資訊視窗,見示例載入查
滑鼠懸停時反白顯示的導航條程式碼(原創)
//說明:在引用檔案的相應位置,寫入<script src="menu.js" type="text/javascript"></script>//MenuItem使用說明:第一個引數為連結顯示內容,可以為圖片,如果為圖片,則內容格式為<IMG
ToolTip外掛,滑鼠懸停時顯示資訊
來自網上示例 <!DOCTYPE html> <html> <head><meta charset="utf-8"> <title>Bootstrap 例項 - 工具提示(Tooltip)外掛</title
U3D顯示滑鼠懸停位置物件的名字
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseClickBehaviourScript : MonoBehaviour {