天天看點

Qt 之字典劃詞

簡述

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

| 版權聲明:一去、二三裡,未經部落客允許不得轉載。

實作

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

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

效果

Qt 之字典劃詞

源碼

建立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);      
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);
}      

更多參考

  • ​​Qt之密碼框不可選中、複制、粘貼、無右鍵菜單等​​

繼續閱讀