QObject就有eventFilter,功能很強(隨心所欲的進行處理,比如用來QLineEdit分詞)


相信大家都用過詞典吧!因為英語不太好。。。O(∩_∩)O~,所以經常進行划詞翻譯!

 

 

實現

原理:鼠標移至某單詞之上,獲取鼠標位置,然后在對應位置進行取詞,翻譯!

基於此原理,下面我們實現為每一個單詞顯示QToolTip。

效果

這里寫圖片描述

源碼

創建QTextEdit隊形,然后通過installEventFilter進行事件監聽。

m_pTextEdit = new QTextEdit(this); m_pTextEdit->setObjectName("highlightLabel"); m_pTextEdit->append(QString::fromLocal8Bit("一去丶二三里")); m_pTextEdit->append(QString::fromLocal8Bit("青春不老,奮斗不止!")); m_pTextEdit->append(QString::fromLocal8Bit("You are not alone.")); m_pTextEdit->append(QString::fromLocal8Bit("進步始於交流,收獲源於分享。")); // 安裝事件過濾器 m_pTextEdit->installEventFilter(this);

實現eventFilter,判斷事件類型為QEvent::ToolTip時,獲取光標,進行取詞。

bool MainWindow::eventFilter(QObject *obj, QEvent *event) { if (obj == m_pTextEdit) { // 事件為提示 if (event->type() == QEvent::ToolTip) { QHelpEvent *pHelpEvent = static_cast<QHelpEvent *>(event); // 獲取光標 QTextCursor cursor = m_pTextEdit->cursorForPosition(pHelpEvent->pos()); cursor.select(QTextCursor::WordUnderCursor); // 真正分詞 // 顯示提示信息 QToolTip::showText(pHelpEvent->globalPos(), cursor.selectedText()); return true; } } return QDialog::eventFilter(obj, event); }

如果對事件過濾不熟悉,可查看更多參考。

http://blog.csdn.net/liang19890820/article/details/51804098


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM