如題,效果為QTreeView或QTableView在取得焦點的情況下,移動滑鼠并短暫停留,即可彈出tooltip并顯示目前滑鼠指針所指向行内的資料
用于顯示太長而被隐藏的資料,共有兩種方式:
1、使用整個視窗/view的事件過濾器
假設視窗中有名稱為treeview控件
bool MyWidget::eventFilter(QObject *editor, QEvent *event)
{
if(event->type()==QEvent::ToolTip){
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event); //Tooptip彈出事件,幫助
QPoint p_Top=helpEvent->globalPos(); //Tooptip的顯示位置,全局坐标
QPoint p_View=ui->treeView->mapFromGlobal(p_Top); //将滑鼠的全局坐标轉換為treeview中的坐标
QModelIndex currentIndex=ui->treeView->indexAt(tmpP); //擷取滑鼠所指向的Index
QString name=currentIndex.data(Qt::DisplayRole).toString();
QToolTip::showText(p_Top, name); //顯示ToolTip
return true;
}
return QWidget::eventFilter(editor, event);
}
綁定事件過濾器:
ui->treeview->setAttribute(Qt::WA_Hover,true); //開啟懸停事件
ui->treeview->installEventFilter(this); //安裝事件過濾器
2、自定義model,繼承自QStandardItemModel
在model類的data函數下加入以下内容:
if(role == Qt::ToolTipRole) {
QString name=index.data(Qt::DisplayRole).toString();
return QToolTip.showText(QCursor.pos(), name);
}