Qt Creator 插件开发(18):向查找对话框添加过滤器(续二)

显示搜索结果

find 插件提供了一个叫做Find::SearchResultWindow的对象,用于显示搜索结果:

Find::SearchResultWindow

我们当然希望搜索结果在这个SearchResultWindow中显示。为了达到这一目的,我们需要再次修改HeaderFilter的代码:

struct HeaderFilterData
{
    // ...

    // Method to search and return the search window
    Find::SearchResultWindow* searchResultWindow() {
        if(m_searchResultWindow) {
            return m_searchResultWindow;
        }
        ExtensionSystem::PluginManager* pm
            = ExtensionSystem::PluginManager::instance();
        m_searchResultWindow = pm->getObject();
        return m_searchResultWindow;
    }
private:
    // ...
    Find::SearchResultWindow *m_searchResultWindow;
};

// ...

void HeaderFilter::findAll(const QString &text, Find::FindFlags findFlags)
{
    // ...

    // Clear the current search results
    d->searchResultWindow()->clearContents();

    // Begin searching
    QString includeline = "#include <" + text + ">";

    // ...
}

void HeaderFilter::displayResult(int index)
{
    Utils::FileSearchResultList results = d->watcher.future().resultAt(index);
    Q_FOREACH(Utils::FileSearchResult result, results) {
        d->searchResultWindow()->addResult(result.fileName,
            result.lineNumber,
            result.matchingLine,
            result.matchStart,
            result.matchLength);
    }
}

注意,我们使用了addResult()这个函数来向SearchResultWindow中添加新的结果项。使用这个函数可以让我们的搜索内容高亮显示,正如前面我们的截屏一样。

附件下载:HeaderFilterPlugin 文件

Leave a Reply